문제
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다. 폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
▶️ 입력 조건
- 첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.
▶️ 출력 조건
- 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
풀이
우선 '.'을 기준으로 split을 한 후 배열로 만들고 각 원소별로 AAAA 혹은 BB로 개수에 맞게 채우고
join을 해서 출력하면 된다고 생각했다.
개수가 딱 떨어지지 않을 경우 (4 혹은 2로) -1을 출력하며 마무리하는 것으로 코드를 작성했다.
texts = list(input().split('.'))
def poliomino(texts):
for index, text in enumerate(texts):
if 'X' in text:
length = len(text)
count_a = length // 4
count_b = (length % 4) // 2
if ((length % 4) % 2) != 0:
return -1
else:
updated_text = ('AAAA' * count_a) + ('BB' * count_b)
texts[index] = updated_text
return '.'.join(texts)
print(poliomino(texts))
나는 항상 답변이 맞았어도 더 좋은 답변이 있는지 찾아보는 편인데
추가로 replace()로 구현하는 훨씬 편한 방식이 있어서 제출을 수정했다.
text = input()
board = text.replace('XXXX', 'AAAA')
board = board.replace('XX', 'BB')
if 'X' in board:
print(-1)
else:
print(board)
대체 이 편한 방식을 왜 못생각했을까...?
'Algorithm > Problem Solving' 카테고리의 다른 글
[Beakjoon] 2217 : 로프 - python (0) | 2025.01.24 |
---|---|
[Beakjoon] 1026 : 보물 - python (0) | 2025.01.24 |
[Baekjoon] 11047 : 동전 0 - python (0) | 2025.01.23 |
[Baekjoon] 2839 : 설탕 배달 - python (1) | 2025.01.23 |
[이코테] 1이 될 때까지 - python (0) | 2025.01.23 |