본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 12933번 오리

by 현장 2022. 5. 15.

-Code

1. 처음 코드

duck = "quack"
s = input()
visited = [False] * len(s)
cnt, p = 0, 0

for i in range(len(s)):
    if s[i] == 'q' and not visited[i]:
        for j in range(len(s)):
            if not visited[j] and duck[p % 5] == s[j]:
                visited[j] = True
                p += 1
        if p % 5 < 5:
            print(-1)
            exit()
        if p % 5 == 0:
            cnt += 1
            p = 0
print(cnt)

처음에 quack에 해당이 되면 지우는 식으로 짰다가 해결이 안돼서 다른 방법을 찾아본 결과 깊이 탐색과 비슷하게 visited를 두어서 위 코드와 같이 짜서 예제 입출력은 잘 나왔으나 특정 부분에서 해결이 안 돼서 다른 방법을 다시 찾았습니다.

 

2. 수정 코드

duck = "quack"
s = input()

if len(s) % 5 != 0:
    print(-1)

else:
    visited = [False] * len(s)
    cnt, p = 0, 0

    for i in range(len(s)):
        if s[i] == 'q' and not visited[i]:
            flag = True
            for j in range(len(s)):
                if not visited[j] and duck[p % 5] == s[j]:
                    visited[j] = True
                    if s[j] == 'k' and flag:
                        cnt += 1
                        flag = False
                    p += 1

    if not all(visited) or cnt == 0:
        print(-1)
    else:
        print(cnt)

그래서 위와 같은 코드가 나왔는데 예외를 빠뜨리고 수정하면서 잘못 고치는 부분이 생겨서 시간이 오래 걸렸습니다.