Implementation_11_오리(12933)

Eugenius1st·2022년 5월 4일
0

Algorithm_Baekjoon

목록 보기
91/158

Implementation11오리(12933)

문제

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

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

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

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

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

입력

첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다.

출력

영선이 방에 있을 수 있는 오리의 최소 수를 구하는 프로그램을 작성하시오. 녹음한 소리가 올바르지 않은 경우에는 -1을 출력한다.

풀이

  • 문장의 길이가 5로 나누어 떨어지지 않으면 잘못된 경우이니 -1출력
  • 문장 맨 앞에 문자가 q가 아닌경우 잘못된 경우이니 -1 출력
  • 그 외 모든 조건을 만족하면 탐색 시작
  • q 로 시작했는지 체크
  • k로 끝나는지 체크

코드

import sys
input = sys.stdin.readline

strings=list(input().rstrip())
answer=[]
def findNext(prev,curr):
    for a in answer:
        if a[-1]==prev:
            a.append(curr)
            return True
    return False

flag=0
for s in strings:
    if s=='q':
        if not findNext('k','q'):
            answer.append(['q']) #새로운 리스트를 추가
    elif s=='u':
        if not findNext('q', 'u'):
            flag=1
            break
    elif s=='a':
        if not findNext('u', 'a'):
            flag = 1
            break
    elif s=='c':
        if not findNext('a', 'c'):
            flag = 1
            break
    else:
        if not findNext('c', 'k'):
            flag = 1
            break
count=0
for a in answer:
    if 'quack' in ''.join(a) and len(a)%5==0:
        count+=1
    else:
        flag=1
        break
if flag==1:
    print(-1)
else:
    print(count)

배운 것

코멘트

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글