Post
오리(백준 12933번) | Gihun Son

오리(백준 12933번)

💡 **Check Point !

( 해당사항 ✓체크 )

  1. 막힘 없이 수월하게 풀린 문제인가?

  2. 1시간이내로 풀렸던 문제인가?

  3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

  4. 시간을 써도 도무지 풀 수 없는 문제인가?

  5. 솔루션을 찾아봤는가?✓


난이도 체감

  1. 최상

  2. 중✓


이해도

  1. 완벽히 이해✓

  2. 다소 헷갈리는 부분들이 있음

  3. 이해 못함

문제

오리의 울음 소리는 “quack”이다. 올바른 오리의 울음 소리는 울음 소리를 한 번 또는 그 이상 연속해서 내는 것이다. 예를 들어, “quack”, “quackquackquackquack”, “quackquack”는 올바른 오리의 울음 소리이다.

영선이의 방에는 오리가 있는데, 문제를 너무 열심히 풀다가 몇 마리의 오리가 있는지 까먹었다.

갑자기 영선이의 방에 있는 오리가 울기 시작했고, 이 울음소리는 섞이기 시작했다. 영선이는 일단 울음소리를 녹음했고, 나중에 들어보면서 총 몇 마리의 오리가 있는지 구해보려고 한다.

녹음한 소리는 문자열로 나타낼 수 있는데, 한 문자는 한 오리가 낸 소리이다. 오리의 울음 소리는 연속될 필요는 없지만, 순서는 “quack”이어야 한다. “quqacukqauackck”과 같은 경우는 두 오리가 울었다고 볼 수 있다.

영선이가 녹음한 소리가 주어졌을 때, 영선이 방에 있을 수 있는 오리의 최소 개수를 구하는 프로그램을 작성하시오.

Untitled

Untitled 1

나의 풀이(정답 참고)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
q_list=input()
quack='quack'

visited=[False]*len(q_list)
count=0
not_t=False
for i in range(len(q_list)):
    is_first=True
    if q_list[i]=='q' and not visited[i]:
        k=0
        for j in range(i,len(q_list)):
            if q_list[j]==quack[k] and not visited[j]:
                visited[j]=True
                if quack[k]=='k':
                    if is_first:
                        count+=1
                        is_first=False
                    k=0
                else:
                    k+=1
        if k!=0:
            not_t=True
            break
if not all(visited) or count==0 or not_t:
    print(-1)
else:
    print(count)
  • 이 문제는 문제 내용이 이해가 안되어서 솔루션을 찾아봤다.
  • 결국 정리해보자면,
    • “quack”이 연속되어 나오는 것은 한마리가 우는 것이다.(붙어있지 않아도 됨)
    • 만약 “quack”을 다 완성시키지 못하는 울음소리가 있다면 잘못된 것
    • 울음소리 중에서 사용되지 않은 문자가 있어도 잘못된 것
  • 따라서 해당 문자를 사용했는지 여부를 visited를 사용해서 구별했고, “quack”에서 ‘k’를 만나면 다시 ‘q’부터 찾도록 하였다.(k=0으로 설정하여)
  • 이때 만약 k=0이 아닌 상태로 끝났다면, 울음소리가 완벽하게 끝나지 않은 것이기 때문에 -1을 출력하도록 하였다.
This post is licensed under CC BY 4.0 by the author.