본문 바로가기
알고리즘/그리디

[백준][Python] 1343번 폴리오미노

by 임짠짠 2022. 3. 24.
반응형
 

1343번: 폴리오미노

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

www.acmicpc.net

 

코드

x_list = list(input().split('.'))
ans = []
err = 0
for i in range(len(x_list)):
    num = len(x_list[i]) 
    if num > 0:
        if num % 2 == 0:
            while num != 0:
                if num >= 4:
                    ans.append('AAAA')
                    num -= 4
                else:
                    ans.append('BB')
                    num -= 2
        else:
            err = 1
            break
            
    if i != len(x_list)-1:
        ans.append('.')
        
if err == 1:
    print(-1)
else:
    for i in ans:
        print(i,end='')

 

설명

입력을 받을 때 ' . '을 기준으로 나누게 했다.

그래서 각각 나눠진 것의 길이를 구해서 만약 홀수이면 err를 1로 만들어서 -1을 출력하게 했다.  만약에 짝수이면 4보다 클 때는 ans 리스트에 AAAA를 추가해주고 그 길이 값을 4씩 빼준다. 4보다 작으면 ans 리스트에 BB를 추가해주고 길이 값을 2씩 빼줬다. 이거를 값이 0이 될 때까지 반복했다.

' . '을 기준으로 나눴기 때문에 리스트에는 ' . '이 존재하지 않는다. 따라서 for문은 한번 돌릴 때마다 리스트에 ' . '를 추가했다. 근데 마지막에는 추가하면 안되기 때문에 i의 값이 len(x_list)-1 보다 작을 때만 추가했다.


구글링을 해보니까 파이썬에는 replace 함수가 있는 걸 알게 됐다.

a = input() 
a = a.replace("XXXX", "AAAA") 
a = a.replace("XX", "BB") 
if 'X' in a: 
	print(-1)
else:
	print(a)

 

반응형

댓글