[백준] 20992번 (파이썬)

dongEon·2024년 1월 8일
0

난이도 SILVER I

문제링크 : https://www.acmicpc.net/problem/20922

문제해결 아이디어

  • 투포인터 알고리즘을 통해 해결했다.
  • counter 라는 배열을 통해 중복된 숫자의 갯수를 확인한다.
  • end 움직이면서 K개 미만 조건을 충족하는지 체크하면서 반복문을 순회한다
  • 중복갯수가 k개 이상일 경우, counter의 s 인덱스의 숫자를 -1하고 s인덱스는 + 1 한다
  • 중복갯수가 k개 미만일 경우, counter의 e 인덱스의 숫자를 +1하고 e인덱스는 + 1 한다
import sys

input = sys.stdin.readline

n,m = map(int, input().split())

arr = list(map(int, input().split()))

s,e = 0,0

counter = [0] * (max(arr) +1)

answer = 0

while e < n:
    if counter[arr[e]] < m:
        counter[arr[e]] += 1
        e += 1
        
    elif counter[arr[e]] >= m:
        counter[arr[s]] -= 1
        s += 1        

    answer = max(answer, e-s)


print(answer)
profile
개발 중에 마주한 문제와 해결 과정, 새롭게 배운 지식, 그리고 알고리즘 문제 해결에 대한 다양한 인사이트를 공유하는 기술 블로그입니다

0개의 댓글