[백준 20922] 겹치는 건 싫어

Junyoung Park·2022년 3월 20일
0

코딩테스트

목록 보기
289/631
post-thumbnail

1. 문제 설명

겹치는 건 싫어

2. 문제 분석

투 포인터 문제로 left, right 커서를 조절하면서 가능한 로컬 최댓값을 기록해둔다.

  • 투 포인터 문제 실력을 늘리자.

3. 나의 풀이

import sys

n, k = map(int, sys.stdin.readline().rstrip().split())
numbers = list(map(int, sys.stdin.readline().rstrip().split()))

left, right = 0, 0
ans = 0
counter = {}
while right < n:
    right_cnt = counter.get(numbers[right], 0)
    if right_cnt < k:
        right_cnt += 1
        counter[numbers[right]] = right_cnt
        right += 1
        # right 위치 수 카운트가 k개 이하이면 계속 확장 가능
    else:
        left_cnt = counter.get(numbers[left], 0)
        left_cnt -= 1
        counter[numbers[left]] = left_cnt
        left += 1
        # k보다 많아지면 k 이하가 될 때까지 left 커서를 오른쪽으로 움직이면서 현재 right 커서 수에 left 커서가 하나 올 떄까지 이동
    ans = max(ans, right - left)
    # ans는 가능한 수열 길이의 로컬 최댓값 유지

print(ans)
profile
JUST DO IT

0개의 댓글