여니의 취준 준비/코딩테스트 (Python)

[Python] n12933번 | 오리

여니's 2021. 5. 3. 15:52

[2022. 02. 22 품]

inp = list(input())
quack = ['q','u','a','c','k']
len_inp = len(inp)
idx = 0
answer = 0
visited = [False] * len_inp
first = False

if len_inp % 5 != 0 or inp[0] != "q":
    print(-1)
    exit()

for a in range(len_inp):
    if inp[a] == "q" and not visited[a]:  # 방문하지 않았고, q인 곳 -> 시작 구간이다.
        first = True
        for i in range(len_inp):
            if not visited[i] and quack[idx] == inp[i]:
                visited[i] = True
                if inp[i] == "k":
                    if first:
                        answer += 1
                        first = False
                    idx=0
                    continue
                idx += 1
if answer == 0 or not all(visited):
    print(-1)
else:
    print(answer)

 

예시 ) q u q a c u k q a u a c k c k

 

첫 번째 오리)

_ _ q _ _ u _ _ a _ _ _ _ c k
> quackquack

 

두 번째 오리 )

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

> quack


-> 총 2 마리

 

(방법 정리)

1. 문장의 길이가 5로 나누어 떨어지지 않으면? 

> 잘못된 경우니까 -1 출력

 

2. 문장 맨 앞에 있는 문자가 q가 아닌 경우?

-> 잘못된 경우니까 -1 출력

 

3. 위 조건을 모두 만족하면? 이제 탐색을 시작한다

1) q로 시작했는지 체크

2) k로 끝나는지 체크

 

 

duck=input()
word = ['q', 'u', 'a', 'c', 'k']
visited = [False] * len(duck)

cnt = 0
idx = 0
if len(duck) % 5 != 0:
    print(-1)

else:
    for a in range(len(duck)):
        if duck[a] == 'q' and not visited[a]:
            first = True
            for i in range(len(duck)):
                if word[idx] == duck[i] and not visited[i]:
                    visited[i] = True
                    if duck[i] == 'k':
                        if first:
                            cnt += 1
                            first = False # quack 한 사이클 돌았으니 first는 다시 False로
                        idx = 0 # quack 인덱스도 0으로 다시 초기화, quack 처음부터 돌아야하니까
                        continue
                    idx += 1 
                    # idx 가 quack 인덱스 저장하는 변수! 

if cnt == 0 or not all(visited):
    print(-1)
else:
    print(cnt)

 

- 문자열 인덱싱

word = 'quack'

word[0] = 'q'

word.index('q') -> 0

 

- 문자열 슬라이싱

word[:5] = quack

word[1:5] = uack

word[:] = quack

word[2:-1] = qck

-> word[2]~word[-1]까지

 


www.acmicpc.net/problem/12933

 

12933번: 오리

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

www.acmicpc.net

코드 참고 출처

tmdrl5779.tistory.com/128

 

[백준] 12933번번 (python 파이썬)

구현 문제이다. 울음소리를 보고 최소한의 오리가 몇마리인지 찾는다. 오리의 울음소리는 quack이다. q -> u -> a -> c -> k 를 순서대로 찾는다. ex) 울음소리가 quqacukqauackck 라면 quack를 순서대로 찾는

tmdrl5779.tistory.com