20922. 겹치는 건 싫어
20922번: 겹치는 건 싫어
홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열
www.acmicpc.net
최장 연속 부분 수열(Longest Continuous Subsequence)
* 연속부분수열: 그 수열의 원소를 하나 이상 연속하여 선택한 부분수열 (수가 연속적일 필요는 없음)
일련의 숫자 또는 요소로 이루어진 배열에서, 순서를 유지하며 가장 긴 연속 부분 수열을 찾는 문제
배열 내에서 순서가 중요하며, 다른 요소들이 끊김 없이 연속
ex) [1, 2, 3, 5, 1, 2, 3, 4]인 경우, 최장 연속 부분 수열은 [1, 2, 3, 4]
- 다른 사람 풀이
- 투포인터 사용
- 앞에서 구한 배열로 길이 저장해두면서 최댓값이 될때 업데이트 되도록
- k개가 넘지 않을 때는 +1
- k개가 넘으면 앞의 배열 제외하고 뒤를 늘려나가면서 길이 비교
from collections import defaultdict
# 같은 원소가 k개 이하인 최장 연속 부분 수열 길이
n, k = map(int, input().split())
lst = list(map(int, input().split()))
count = defaultdict(int)
ans = 0
left, right = 0, 0
while right < n:
if count[lst[right]] < k:
count[lst[right]] += 1
right += 1
else:
count[lst[left]] -= 1
left += 1
ans = max(ans, right-left)
print(ans)
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준] [백트래킹] 2661. 좋은 수열 (1) | 2023.10.17 |
|---|---|
| [백준][DP] 2011. 암호코드 풀이 (0) | 2023.10.15 |
| [백준][DFS][백트래킹] 2310. 어드벤처 게임 (0) | 2023.09.09 |
| [백준][조합][BFS] 1941. 소문난 칠공주 (0) | 2023.09.09 |
| [백준][BFS] 2583. 영역 구하기 (0) | 2023.09.09 |