본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 15565번 귀여운 라이언

by 현장 2022. 5. 11.

-Code

from collections import deque
n, k = map(int, input().split())
doll = list(map(int, input().split()))
queue = deque()
step = k * 2 + 1
cnt, ryan = 0, 0
result = 1e9

for i in range(n):
    queue.append(doll[i])

    if step < cnt:
        if queue.popleft() == 1:
            ryan -= 1

    if doll[i] == 1:
        ryan += 1
        cnt += 1
    elif doll[i] == 2:
        cnt += 1

    while ryan == k:
        result = min(len(queue), result)
        if queue.popleft() == 1:
            ryan -= 1

print(result if result != 1e9 else -1)

처음에 시간 초과로 실패해서 고민해도 안돼서 찾아보니 deque를 이용하는 방법이 있어서 몇 시간 생각하여 값이 조금씩 틀어지게 나와서 print를 찍어보니 앞에 2가 있고 라이언의 개수가 k와 같을 때 길이가 길게 나오는 것이 문제였습니다. 그래서 while문으로 라이언의 수가 k와 같을 경우 deque의 맨 앞의 2를 모두 지웠으나 어딘가에서 틀려서 밖으로 빼었더냐 값이 나왔습니다. 하지만 값이 나오지 않을 경우 -1 출력하는 것을 빼먹어서 다시 고쳐서 해결을 했습니다.