문제
1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
이 문제는 그리디 알고리즘으로 해결할 수 있는 문제로 문제 아이디어는 다음과 같습니다.
폴리오미노 2개(AAAA, BB)를 무한대만큼 가지고 있을 때, 겹침없이 X를 모두 폴리오미노로 덮어야 합니다. AAAA는 BB의 배수이기 때문에 항상 최소한의 교체로 최적의 해를 가질 수 있습니다.
풀이 1 - Python
s = input()
idx = 0
answer = ''
while idx<len(s):
if s[idx : idx + 4] == 'XXXX':
answer+='AAAA'
idx+=4
elif s[idx : idx + 2] == 'XX':
answer += 'BB'
idx+=2
elif s[idx] == 'X':
answer = str(-1)
break
else:
answer += s[idx]
idx+=1
print(answer)
풀이 2 - Python
board = input()
board = board.replace('XXXX', 'AAAA')
board = board.replace('XX', 'BB')
if 'X' in board:
print(-1)
else:
print(board)
- 위 코드는 XXXX를 AAAA로 XX는 BB로 치환해줍니다.
- 이 후, 바뀌지 않은 문자 X가 있으면, 폴리오미노로 덮을 수 없는 경우이므로 -1을 출력해줍니다.
- 파이썬의 replace(a,b) 메소드 : “a를 b로 바꾸어라”를 의미합니다.
'백준' 카테고리의 다른 글
| [백준] 11399 ATM - Python (1) | 2023.05.24 |
|---|---|
| [백준] 1758 알바생 강호 - Python (1) | 2023.05.24 |
| [백준] 1654 랜선 자르기 - Python (0) | 2023.03.02 |
| [백준] 12891 DNA 비밀번호 - Python (0) | 2023.02.28 |
| [백준] 2578, 빙고 - Python (0) | 2023.01.02 |