AAAA와 BB, 폴리오미노 2개를 무한개만큼 가지고 있다. '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
틀린 코드라고 적지만 아직도 난 논리상 오점을 찾지 못했다. XXXX를 AAAA로, XX를 BB로 바꾸는 문제다. X의 개수를 센 후 X의 개수에 맞는 액션을 취했다. 사전순서대로 만들기 위해 AAAA를 우선적으로 치환하였다. X가 많이 나온 경우 나누어떨어지면 치환하는 방법을 택했다. 시간초과도 아니고 30%에서 틀렸습니다가 뜨니까 이해가 안된다. 어떤 부분을 놓친걸까?
import sys
board = sys.stdin.readline()
count = 0
for i in range(len(board)):
if board[i] == "X":
count += 1
elif board[i] == "." or i == len(board)-1:
if count >= 6:
count_four = count // 4
count = count % 4
count_two = count // 2
count = count % 2
if count == 0:
if count_four:
board = board.replace("X", "A", count_four*4)
if count_two:
board = board.replace("X", "B", count_two*2)
count = 0
if count > 0 and count % 4 == 0:
board = board.replace("X", "A", 4)
count = 0
elif count > 0 and count % 2 == 0:
board = board.replace("X", "B", 2)
count = 0
if count:
print(-1)
else:
print(board.strip())
아니.....이거라고...? replace()를 테스트할 때 앞의 것만 바뀌는 게 아니라 전체가 바뀌길래 하나씩 세야되는걸로 생각했는데 앞에 AAAA를 먼저 치환해버리면 XX가 존재하는 경우와 존재하지 않은 경우가 자동으로 나뉜다. 하 그러네 그냥 4개를 먼저바꿔버리면 남는걸로 판단하면 되네 나누어떨어질 때까지 나눌필요가 없었네...........호호
board = input()
board = board.replace("XXXX", "AAAA")
board = board.replace("XX", "BB")
if 'X' in board:
print(-1)
else:
print(board)