본문 바로가기

카테고리 없음

[백준] 1343번 폴리오미노

728x90

문제

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

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

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

 

입력

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

 

출력

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

 

 


코드

내가 푼 코드

 

import sys
input = sys.stdin.readline

B = input().rstrip()
i, cnt = 0, 0
F = []

while i < len(B):
#연속된 문자가 XXXX이면 AAAA로 대체
    if B[i:i + 4] == "XXXX":
        F.append("AAAA")
        i += 4
#연속된 문자가 XX이면 BB로 대체
    elif B[i:i + 2] == "XX":
        F.append("BB")
        i += 2
#문자가 .이면 그대로
    elif B[i] == ".":
        F.append(".")
        i += 1
#문자가 대체가 안되면 멈춤
    else:
        cnt += 1
        break

print(*F, sep='') if cnt == 0 else print(-1)

 

 

replace() 사용 풀이

 

board = input()
#replace() 함수를 이용하여 문자열 치환
board = board.replace('XXXX', 'AAAA')
board = board.replace('XX', 'BB')

if 'X' in board: print(-1)
else: print(board)

 

 


정리할 내용

replace() 함수

 

- 왼쪽부터 해당하는 문자열을 찾아 치환해주는 함수

- 무언가 치환/대체하는 문제가 나올 때 생각하기

 


 

문제를 풀고 다른 풀이를 보니까 이 짤이 생각났다.

 

 

 

 

끝!!


[백준 1343번] 을 정리한 내용입니다.