문제 : https://www.acmicpc.net/problem/20922
솔루션 :
이중포문으로 진행하기엔 시간이부족함 ( 투포인터로 진행 )
K를 넘지 않는경우 right이동, 넘는 경우 left이동
소스코드 :
N, K = map(int, input().split())
data = list(map(int, input().split()))
left = 0
right = 0
cnt = [0 for i in range(max(data)+1)]
len_list = []
#데이터 끝까지 넣었을때
while right < N :
if cnt[data[right]] < K : #K를 넘지 않는경우
cnt[data[right]] += 1 #갯수추가, right이동
right +=1
else : #K를 넘는경우
cnt[data[left]] -= 1 #갯수감소, left이동
left +=1
len_list.append(right-left)#매 순간마다 길이를 저장함
print(max(len_list))
'CodingTest' 카테고리의 다른 글
SWEA 1234 [S/W 문제해결 기본] 10일차 - 비밀번호 (0) | 2022.06.05 |
---|---|
SWEA 14178. 1차원 정원 파이썬 (0) | 2022.06.05 |
[BOJ] 11403 경로 찾기 (0) | 2022.02.19 |
[BOJ] 14502 연구소 (0) | 2022.02.19 |
[BOJ] 10026 적록색약 (0) | 2022.02.19 |