난이도 SILVER I
문제링크 : https://www.acmicpc.net/problem/20922
문제해결 아이디어
- 투포인터 알고리즘을 통해 해결했다.
- counter 라는 배열을 통해 중복된 숫자의 갯수를 확인한다.
- end 움직이면서 K개 미만 조건을 충족하는지 체크하면서 반복문을 순회한다
- 중복갯수가 k개 이상일 경우, counter의 s 인덱스의 숫자를 -1하고 s인덱스는 + 1 한다
- 중복갯수가 k개 미만일 경우, counter의 e 인덱스의 숫자를 +1하고 e인덱스는 + 1 한다
import sys
input = sys.stdin.readline
n,m = map(int, input().split())
arr = list(map(int, input().split()))
s,e = 0,0
counter = [0] * (max(arr) +1)
answer = 0
while e < n:
if counter[arr[e]] < m:
counter[arr[e]] += 1
e += 1
elif counter[arr[e]] >= m:
counter[arr[s]] -= 1
s += 1
answer = max(answer, e-s)
print(answer)