#최장 연속 부분 수열 길이 출력
n,k = map(int,input().split())
a = list(map(int,input().split()))
cnt = [0] *(max(a)+1)
start = end = 0
answer = 0
while end < n:
#해당 수가 k개 이하로 들어 있으면 범위를 늘려준다.(오른쪽으로)
if cnt[a[end]] < k:
cnt[a[end]] += 1
end += 1
else:
#범위를 줄여주는데 이때 start부분의 하나를 빼주어야 한다. (그래야 다음 길이 탐색이 계속 됨)
cnt[a[start]] -= 1
start += 1
answer = max(answer, end - start)
print(answer)
- k를 넘어가지 않을 때는 그냥 해당 번호(인덱스로 사용)에 몇개가 있는지를 기록을 해주며 진행한다.
- k를 넘어가면 해당 start의 범위를 줄여가며 진행해준다.
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][투포인터] - 11728. 배열 합치기 (0) | 2022.09.07 |
---|---|
[백준][큐] - 1158. 요세푸스 문제 (0) | 2022.09.06 |
[백준][투포인터] - 3273. 두 수의 합 (0) | 2022.08.14 |
[백준][투포인터] - 2003. 수들의 합 2 (0) | 2022.08.14 |
[백준][BFS] - 14502. 연구소 (0) | 2022.08.04 |