문제풀이/백준(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의 범위를 줄여가며 진행해준다.