🐸 문제 정보
🤖 알고리즘
투포인터
⏱️ 풀이 시간
15.53m
📝 풀이
비교적 간단한 투포인터 문제였다.
마지막까지 전부 통과한 경우에 길이를 출력하는 것을 잊어 약간의 시간이 더 걸렸다.
- start와 end 모두 0부터 시작
- end를 하나씩 뒤로 이동하며 딕셔너리에 담기
- end 인덱스에 해당하는 숫자의 개수가 k보다 많다면, 우선 end - start를 res와 비교하여 더 큰 값 넣기
- start를 뒤로 하나씩 이동하며 딕셔너리에서 해당 인덱스의 숫자를 빼줌
- 이 때 딕셔너리[end]에 해당하는 값의 개수가 k개 이하가 되면 탈출
- 마지막에 end - start와 반복문 돌며 갱신해놓은 res, 둘 중 큰 값을 출력
🧑💻 나의 답
# pypy3
import sys
input = sys.stdin.readline
n, k = list(map(int, input().rstrip().split()))
nums = list(map(int, input().rstrip().split()))
num_dict = {}
s, e = 0, 0
res = 0
while e != n:
num_dict[nums[e]] = num_dict.get(nums[e], 0) + 1
if num_dict.get(nums[e], 0) > k:
res = max(res, e - s)
while (s <= e) and (num_dict.get(nums[e], 0) > k):
num_dict[nums[s]] -= 1
s += 1
e += 1
print(max(res, e - s))
'PS > 문제풀이' 카테고리의 다른 글
백준 3758 KCPC Python (1) | 2024.01.22 |
---|---|
백준 1253 좋다 Python (1) | 2024.01.21 |
백준 17484 진우의 달 여행 (Small) Python (0) | 2024.01.21 |
백준 25757 임스와 함께하는 미니게임 Python (0) | 2024.01.21 |
백준 2467 용액 Python (0) | 2024.01.20 |