알고리즘 공부(C++)

백준 1343 폴리오미노

혀니리리 2022. 9. 6. 20:58
728x90

1343번: 폴리오미노 (acmicpc.net)

 

1343번: 폴리오미노

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

www.acmicpc.net

하하..

그리디였는데

그리디는...... 효율적이면 대수인 유형이지.

str = input()
cnt = 0
dot = 0
lst = []
lst2 = []
for i in range(len(str)):
    if str[i] == 'X':
        cnt += 1
    elif str[i] == '.':
        if cnt != 0:
            if cnt % 2 == 1:
                break
            lst.append(cnt)
        cnt = 0
        lst.append('.')
lst.append(cnt)
if cnt % 2 == 1:
    print(-1)
else:
    for i in range(len(lst)):
        if lst[i] != '.':
            if lst[i] % 4 == 2:
                lst2.append("AAAA" * (lst[i] // 4))
                lst2.append("BB")
            elif lst[i] % 4 == 0:
                lst2.append("AAAA" * (lst[i] // 4))
            else:
                print(-1)
                break
        else:
            lst2.append(lst[i])
    print(''.join(lst2))

코드가 무려 이렇게

길었다.

그런데...

 

 

str = input()
str = str.replace("XXXX","AAAA")
str = str.replace("XX","BB")

if "X" in str:
    print(-1)
else:
    print(str)

아니 이렇게 짧은 코드가..있다니..

replace하면 그냥 딱 해당하는 부분을 바꿔준다........ 알아두자.

728x90