https://atcoder.jp/contests/abc210/tasks/abc210_c
시간 2초, 메모리 1024MB
input :
output :
조건 :
수의 최댓값이 아닌 종류의 개수를 묻는 문제이다.
예전에 보던 것 중 슬라이딩 윈도우(투 포인터)의 개념에 딕셔너리를 이용해서 종류의 수를 기록하는 방식을 사용하자.
딕셔너리에 값을 저장한 이후에는 빈도값을 계속 업데이트 하는 건데 키를 삭제할 수 있다. 이를 이용해서 길이를 이용해서 찾을 수 있다.
삭제를 몰라서 반복문을 돌리다가... 시간 초과가 발생했다.
import sys
n, k = map(int, sys.stdin.readline().split())
data = list(map(int, sys.stdin.readline().split()))
left, ans = 0, 0
temp = dict()
for right in range(len(data)):
if data[right] not in temp:
temp[data[right]] = 1
else:
temp[data[right]] += 1
if right - left >= k - 1:
if len(temp) > ans:
ans = len(temp)
temp[data[left]] -= 1
if temp[data[left]] == 0:
del temp[data[left]]
left += 1
print(ans)