DHistory

[Baekjoon] 구현 - 12933 오리 본문

Computer Science/Algorithm

[Baekjoon] 구현 - 12933 오리

ddu0422 2024. 9. 5. 20:26

문제

https://www.acmicpc.net/problem/12933

 

풀이

한 마리의 오리가 여러 번 소리를 낼 수 있습니다.

녹음 중에서 여러 번 소리를 낸 오리를 찾아야합니다.

 

단, 녹음이 올바르지 않은 경우도 있습니다.

1) q 로 시작하지 않는 경우

2) k 로 끝나지 않는 경우

3) 5의 배수가 아닌 경우

 

이 경우를 제외하고는 녹음이 제대로 되었습니다.

방문하지 않은 문자열을 순차적으로 방문하여 울음 소리(quack)를 찾습니다.

 

예시

  녹음: quqaquuacakcqckkuaquckqauckack
오리 1: ____q_u__a___ck_______________
오리 2: __q__u_ac_k_q___ua__ckq_u__ack
오리 3: qu_a_______c___k__qu___a_ck___

 

 

코드

import sys

text = sys.stdin.readline().rstrip()
quack = 'quack'

def solution(text: str):
    # 예외 처리 (ex. qquack)
    if text[0] != "q" or text[-1] != "k" or len(text) % 5:
        return -1

    visited = [False] * len(text)
    result = 0

    for _ in range(len(text)):
        queue = []
        index = 0
        for i, v in enumerate(text):
            if visited[i]:
                continue

            if not queue and v == "q":
                queue.append(v)
                visited[i] = True
            elif queue and queue[-1] == quack[index % 5] and v == quack[(index + 1) % 5]:
                queue.append(v)
                visited[i] = True
                index += 1
        
        if len(queue) and len(queue) % 5 == 0:
            result += 1

    return result if result and all(visited) else -1


print(solution(text))