본문 바로가기

알고리즘/python

[python/파이썬] 백준 1343 폴리오미노

반응형

문제

민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB

이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.

폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.

출력

첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.

예제 입력 1 복사

XXXXXX

예제 출력 1 복사

AAAABB

예제 입력 2 복사

XX.XX

예제 출력 2 복사

BB.BB

예제 입력 3 복사

XXXX....XXX.....XX

예제 출력 3 복사

-1

예제 입력 4 복사

X

예제 출력 4 복사

-1

예제 입력 5 복사

XX.XXXXXXXXXX..XXXXXXXX...XXXXXX

예제 출력 5 복사

BB.AAAAAAAABB..AAAAAAAA...AAAABB

 

 

[소스 코드]

 

처음에 문제를 읽고 '.'으로 구성된 문자열이 나오면 split()할 수 있도록 정규표현식을 쓸까 생각을 했지만

replace 함수로 간단하게 해결될 것 같아서 replace로 풀어보았다.

답이 여러 개일 수 있지만 사전 순으로 했을 때 가장 앞서는 답을 출력하라고

했기에 'AAAA'로 대체하는 문장을 먼저 작성하였다.

 

board = input()

board = board.replace('XXXX','AAAA') #해당하는 문자열이 있을 때 해당 문자열로 대체 
board = board.replace('XX','BB')

check = 0
for s in board:
    if s == 'X': #만약에 남은 문자중에 'X'가 있다면 대체되지 않은 것이기에 -1 출력
        print(-1)
        check += 1
        break

if check == 0: #check가 증가되지 않았다면 'X'가 없는 것 이므로 바뀐 문자열 출력
    print(board)
반응형