오리(백준 12933번)
💡 **Check Point !
( 해당사항 ✓체크 )
막힘 없이 수월하게 풀린 문제인가?
1시간이내로 풀렸던 문제인가?
1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
시간을 써도 도무지 풀 수 없는 문제인가?
솔루션을 찾아봤는가?✓
난이도 체감
최상
상
중✓
하
이해도
완벽히 이해✓
다소 헷갈리는 부분들이 있음
이해 못함
문제
오리의 울음 소리는 “quack”이다. 올바른 오리의 울음 소리는 울음 소리를 한 번 또는 그 이상 연속해서 내는 것이다. 예를 들어, “quack”, “quackquackquackquack”, “quackquack”는 올바른 오리의 울음 소리이다.
영선이의 방에는 오리가 있는데, 문제를 너무 열심히 풀다가 몇 마리의 오리가 있는지 까먹었다.
갑자기 영선이의 방에 있는 오리가 울기 시작했고, 이 울음소리는 섞이기 시작했다. 영선이는 일단 울음소리를 녹음했고, 나중에 들어보면서 총 몇 마리의 오리가 있는지 구해보려고 한다.
녹음한 소리는 문자열로 나타낼 수 있는데, 한 문자는 한 오리가 낸 소리이다. 오리의 울음 소리는 연속될 필요는 없지만, 순서는 “quack”이어야 한다. “quqacukqauackck”과 같은 경우는 두 오리가 울었다고 볼 수 있다.
영선이가 녹음한 소리가 주어졌을 때, 영선이 방에 있을 수 있는 오리의 최소 개수를 구하는 프로그램을 작성하시오.
나의 풀이(정답 참고)
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.