알고리즘/python
[BOJ/Python] 20922번 : 겹치는 건 싫어
2ivii
2025. 7. 16. 15:02
https://www.acmicpc.net/problem/20922
문제
홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 개 이하로 들어 있는 최장 연속 부분 수열의 길이를 구하려고 한다.
이하의 양의 정수로 이루어진 길이가 인 수열이 주어진다. 이 수열에서 같은 정수를 개 이하로 포함한 최장 연속 부분 수열의 길이를 구하는 프로그램을 작성해보자.
입력

출력
조건을 만족하는 최장 연속 부분 수열의 길이를 출력한다.
구상
우선 숫자의 범위가 100000이므로 100001짜리 배열을 만들어 count를 셀 것이다. 이 카운트를 안넘는다면, end라는 포인터를 오른쪽으로 옮기고, 만약 카운트가 넘어가면 start를 옮기며 count가 안넘게 조정하여, len을 구하면 될 거 같다
코드
n,k = map(int,input().split())
arr=list(map(int,input().split()))
count=[0 for _ in range(100001)]
ml=0
start,end=0,0
while end < n:
if count[arr[end]] < k:
count[arr[end]] += 1
end += 1
ml = max(ml, end - start)
else:
count[arr[start]] -= 1
start += 1
print(ml)