[구현] 12933 오리

7558 단어 algorithmalgorithm

링크 - https://www.acmicpc.net/problem/12933

코드

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)

풀이 방법

직관적인 방법으로 문제를 풀었다.
'quack'이라는 문자열을 갖는 리스트들을 각각 만들어서 오리의 개수를 세어주는 방식으로 구현했다.

이 때 고려해야할 점이 몇가지 있었는데

  1. 현재 문자가 'q'일 때, 바로 리스트를 생성하면 안되고 이전에 'quack'까지 울음소리를 내었던 오리가 있는지 확인해야했다. (오리의 최소개수를 보장하기 위해)

  2. 현재 문자의 순서가 올바르지 않은 경우는 -1을 리턴해줘야 한다.

  3. 한 오리가 앞서 여러 번의 울음소리를 내었더라도 마지막 울음소리가 quack이 아니라면 -1을 리턴해줘야 한다.

quackquackqua의 경우 마지막 울음소리가 완전하지 않기 때문에 -1을 리턴해야 한다.

좋은 웹페이지 즐겨찾기