[백준] 20922번 - 겹치는 건 싫어 Python

Tuna·2022년 6월 2일
0

Two Pointer

목록 보기
2/2

문제


홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 KK개 이하로 들어 있는 최장 연속 부분 수열의 길이를 구하려고 한다.

100000100\,000 이하의 양의 정수로 이루어진 길이가 NN인 수열이 주어진다. 이 수열에서 같은 정수를 KK개 이하로 포함한 최장 연속 부분 수열의 길이를 구하는 프로그램을 작성해보자.

입력


첫째 줄에 정수 NN (1N2000001 \le N \le 200\,000)과 KK (1K1001 \le K \le 100)가 주어진다.

둘째 줄에는 a1,a2,...an{a_1, a_2, ... a_n}이 주어진다 (1ai1000001 \le a_i \le 100\,000)

출력


조건을 만족하는 최장 연속 부분 수열의 길이를 출력한다.

예제 입력 1


9 2
3 2 5 5 6 4 4 5 7

예제 출력 1


7

나머지 예제는 생략한다.

풀이


Python

import sys
input = sys.stdin.readline

n,k = map(int,input().rstrip().split())
l = list(map(int,input().rstrip().split()))

answer = 0
_dict = {}
left, right = 0, 0

while right < n:
    r_cnt = _dict.get(l[right],0)
    if r_cnt < k:
        _dict[l[right]] = _dict.get(l[right],0) + 1
        right+=1
    else:
        _dict[l[left]] = _dict.get(l[left],0) - 1
        left+=1
    answer = max(answer, right-left)

print(answer)

정리


  • 투 포인터 알고리즘을 이용해 문제를 해결했다.
profile
BE 개발자가 되기 위해 노력하는 사람

0개의 댓글