📝 문제
💡 민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다.
AAAA와 BB이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때,
민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다.
이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
⚙️ 입력 : 첫째 줄에 보드판이 주어진다.
보드판의 크기는 최대 50이다.
⚙️ 출력 : 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다.
만약 덮을 수 없으면 -1을 출력한다.
1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
✅ 풀이
board = input()
answer = ''
count = 0
check = True
for i in range(len(board)):
if board[i] == 'X':
count += 1
elif board[i] == '.':
if count % 2 == 1:
check = False
break
else:
answer += ('AAAA' * (count // 4))
answer += ('BB' * ((count % 4) // 2))
answer += '.'
count = 0
if count % 2 == 1:
check = False
answer += ('AAAA' * (count // 4))
answer += ('BB' * ((count % 4) // 2))
if check:
print(answer)
else:
print(-1)
💡 문자열의 처음부터 X를 카운팅하며 진행했다.
.을 만나면 이전까지의 카운트를 바탕으로 정답을 일부 만들도록 했고,
마지막에 반복이 종료된 이후에 남은 나머지를 가지고 한번 더 진행하여
나머지 정답을 마저 만들어서 마무리하도록 했다.