알고리즘/python

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

ㅌㅇㄴ 2022. 3. 2. 22:51
반응형

문제

민식이는 다음과 같은 폴리오미노 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)
반응형