문제풀이/백준(Boj) 문제풀이
[백준][투포인터] - 20922. 겹치는 건 싫어
얄루몬
2022. 8. 15. 13:58
#최장 연속 부분 수열 길이 출력
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의 범위를 줄여가며 진행해준다.