20922-s1 성공
This commit is contained in:
44
workbook_8708/20922-s1.py
Normal file
44
workbook_8708/20922-s1.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# 겹치는 건 싫어
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from collections import deque
|
||||||
|
|
||||||
|
input = sys.stdin.readline
|
||||||
|
|
||||||
|
def solution():
|
||||||
|
n, k = map(int, input().rstrip().split())
|
||||||
|
s = list(map(int, input().rstrip().split()))
|
||||||
|
|
||||||
|
idx = 0
|
||||||
|
c = {}
|
||||||
|
d = deque([])
|
||||||
|
result = 0
|
||||||
|
while idx < len(s):
|
||||||
|
new = s[idx]
|
||||||
|
if not c.get(new, 0):
|
||||||
|
c[new] = 0
|
||||||
|
d.append(new)
|
||||||
|
c[new] += 1
|
||||||
|
if c[new] > k:
|
||||||
|
while d and c[new] > k:
|
||||||
|
now = d.popleft()
|
||||||
|
c[now] -= 1
|
||||||
|
result = max(result, len(d))
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
print(result)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
solution()
|
||||||
|
|
||||||
|
"""
|
||||||
|
걸린 시간: 15분
|
||||||
|
|
||||||
|
시간 복잡도: 한 요소가 deque에 들어갔다가 나오기를 한번씩만 하므로 O(n)이다.
|
||||||
|
|
||||||
|
해설: deque에 숫자를 넣고, 숫자마다 개수를 dict로 센다.
|
||||||
|
숫자를 deque에 넣었을 때 그 숫자의 개수가 k개를 넘으면 그 숫자가 k개 이하가 될때까지 deque에서 popleft를 한다.
|
||||||
|
매번 현재 길이를 최대 길이와 비교해간다.
|
||||||
|
"""
|
||||||
Reference in New Issue
Block a user