728x90
뭔가 그리디스럽지 않다고 생각한 문제이다. 처음에는 당연히 ' . ' 를 기준으로 split 해야하는줄 알고 많이 헤맸던거 같다
(뭐 안헤매는 문제가 적지는 않지만...)
그러다 문득 split 하지 않고 문자열로 생각해 보면 쉽지 않을까 라는 생각이 들었고
그 결과 단 몇줄만의 코드로 풀이가 가능하다는 것을 알았다.
이 문제의 핵심은 replace의 정확한 사용법을 아느냐 이다.
만약 'XXXXX' 이렇게 연속된 5개의 X가 있을때 replace('XXXX', 'AAAA')를 해준다면 replace는 각각의 인덱스,
즉 0의 위치부터 순서대로 'XXXX'를 찾아내어 그것을 명령대로 바꿔준후 다시 'XXXX'를 찾아나선다
즉 'AAAAX' 이렇게 변한다는 뜻이다.
그동안 replace를 공부할때는 [ 'apple', 'banana' ] 이런식의 리스트안의 단어들만 바꾸는 식의 학습을 하다 보니
정확히 replace가 어떤 원리로 실행되는지 잘 몰랐던 것 같다.
po = input()
#replace는 왼쪽부터 해당하는 문자열을 찾아서 치환
po = po.replace('XXXX','AAAA') #왼쪽부터 XXXX를 찾아서 AAAA로 치환
po = po.replace('XX','BB') #왼쪽부터 XX를 찾아서 BB로 치환
if 'X' in po:
print(-1) #치환하고 남은 x에 X가 남아있다면 X보드판을 폴리오미노로 덮을수 없는것
else:
print(po)
'Algorithm' 카테고리의 다른 글
백준 알고리즘 파이썬(Python) 1758번 알바생 강호 (0) | 2021.05.09 |
---|---|
백준 알고리즘 파이썬(Python) 13305번 주유소 (0) | 2021.05.02 |
백준 알고리즘 파이썬(Python) 19598번 최소 회의실 개수 (0) | 2021.04.15 |
백준 알고리즘 파이썬(Python) 2217번 로프 (0) | 2021.04.14 |
백준 알고리즘 파이썬(Python) 14916번 거스름돈 (0) | 2021.04.14 |