[구현] 12933 오리
링크 - 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'이라는 문자열을 갖는 리스트들을 각각 만들어서 오리의 개수를 세어주는 방식으로 구현했다.
이 때 고려해야할 점이 몇가지 있었는데
- 현재 문자가 'q'일 때, 바로 리스트를 생성하면 안되고 이전에 'quack'까지 울음소리를 내었던 오리가 있는지 확인해야했다. (오리의 최소개수를 보장하기 위해)
- 현재 문자의 순서가 올바르지 않은 경우는 -1을 리턴해줘야 한다.
- 한 오리가 앞서 여러 번의 울음소리를 내었더라도 마지막 울음소리가 quack이 아니라면 -1을 리턴해줘야 한다.
quackquackqua의 경우 마지막 울음소리가 완전하지 않기 때문에 -1을 리턴해야 한다.
Author And Source
이 문제에 관하여([구현] 12933 오리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@isg/구현-12933-오리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)