본문 바로가기
Algorithm/Greedy

[파이썬] 백준 1343 : 폴리오미노 (실버5)

by 베짱이28호 2023. 5. 28.

[파이썬] 백준 1343 : 폴리오미노 (실버5)

 

1343번: 폴리오미노

첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.

www.acmicpc.net


문제


풀이

0. 방향성 생각

.을 기준으로 나눈다.

나누어진 문자열 중 X의 길이별로 구분한다.

 

1. 전체 코드

word = input()
arr = list(word.split('.'))
temp = []
goal = True

for i in arr:
    if len(i)%2 == 0:
        a,b = divmod(len(i),4)
        s = ''
        s += 'AAAA'*a
        s += 'B'*b
        temp.append(s)
    else :
        print(-1)
        goal = False
        break
if goal :
    print('.'.join(temp))

중간에 X가 홀수개인 문자열을 만났을 경우에 -1을 출력하고 goal = False로 바꿔준다.(마지막에 출력하지 못하게)

X가 짝수인 경우에는 4로 나눈 몫과 나머지를 구한다.

4로 나눈 몫의 개수만큼 'AAAA'를 추가, 나머지는 0 또는 2이다. 나머지의 개수만큼 'B'를 추가해준다.

한 문자열에 대한 탐색이 끝났으면 temp 리스트에 추가한다.

출력은 마지막에 .으로 구분하여 출력

댓글