C - Colorful Candies | Beginner Contest 210

LONGNEW·2021년 7월 18일
0

CP

목록 보기
48/155

https://atcoder.jp/contests/abc210/tasks/abc210_c
시간 2초, 메모리 1024MB

input :

  • N K (1 ≤ N ≤ K ≤ 2 * 105)
  • c1, c2, ..., cn

output :

  • Print the maximum possible number of distinct colors in candies Takahashi gets.
    Takahashi가 가질 수 있는 구별이 가능한 캔디의 최댓값을 출력하시오.

조건 :

  • Takahashi can choose K consecutive candies and get them.
    Takahasi가 K개의 사탕을 연속적인 부분배열로 고를 수 있다.

수의 최댓값이 아닌 종류의 개수를 묻는 문제이다.
예전에 보던 것 중 슬라이딩 윈도우(투 포인터)의 개념에 딕셔너리를 이용해서 종류의 수를 기록하는 방식을 사용하자.

딕셔너리

딕셔너리에 값을 저장한 이후에는 빈도값을 계속 업데이트 하는 건데 키를 삭제할 수 있다. 이를 이용해서 길이를 이용해서 찾을 수 있다.

삭제를 몰라서 반복문을 돌리다가... 시간 초과가 발생했다.

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)

0개의 댓글