practivceAlgorithm/백준

[백준][Python] 15961 회전초밥 : 슬라이딩 윈도우 연습

findTheValue 2021. 8. 11. 09:45

원형 큐이므로 배열 두개 이어주고 순회.

for 문을 돌려 right는 따로 컨트롤x

길이가 k가 되면 최댓값 갱신, left삭제, left idx 증가를 반복.ㄴ

import sys
input = sys.stdin.readline
from collections import defaultdict

N, d, k, c = map(int,input().split())
sushi = []
for _ in range(N):
    sushi.append(int(input()))
sushi.extend(sushi)

left = 0
right = 0
max_cnt = 0
eat = defaultdict(int)

eat[c] += 1

for right in range(len(sushi)):
    eat[sushi[right]] += 1

    if right >= k-1:
        max_cnt = max(max_cnt,len(eat))
        eat[sushi[left]] -= 1
        if eat[sushi[left]] == 0:
            del eat[sushi[left]]
        left += 1
        
print(max_cnt)