Algorithm/Baekjoon

[백준 20922] 겹치는 건 싫어 (Python)

문제 링크 #

문제 해설 #

Idea #

  • Two Pointer
  • 수열의 시작과 끝 지점에 대한 두 개의 포인터 지정
  • 끝 지점에 대한 포인터를 확장하면서 탐색되는 원소의 수를 카운트
  • 원소의 수가 K개와 같아지는 시점부터 시작 지점에 대한 포인터를 확장하여 범위 축소
  • 최종적으로 두 포인터 간 거리의 최대치를 출력

Time Complexity #

  • O(N) = 200,000

Data Size #

  • N: 1 <= int <= 200,000
  • K: 1 <= int <= 100
  • a: int(100,000) * N

해설 코드 #

python
N, K = map(int, input().split())
a = list(map(int, input().split()))
answer = 0
start, end = 0, 0
counter = [0] * (max(a)+1)

while end < N:
    if counter[a[end]] < K:
        counter[a[end]] += 1
        end += 1
    else:
        counter[a[start]] -= 1
        start += 1
    answer = max(end-start, answer)

print(answer)
PREV [백준 1697] 숨바꼭질 (Python) NEXT [백준 22859] HTML 파싱 (Python)