λ¬Έμ
λ°±μ€ μ¨λΌμΈ μ μ§ - 16472λ²
νμ΄ κ³Όμ
μ΅λ N
κ°μ μ’
λ₯μ μνλ²³μ κ°μ§ μ°μλ λ¬Έμμ΄μ€μμ μΈμν μ μλ μ΅λ λ¬Έμμ΄μ κΈΈμ΄λ₯Ό ꡬνλ λ¬Έμ μ
λλ€.
μ΅λ λ¬Έμμ΄μ κΈΈμ΄κ° 100,000
μ΄κΈ° λλ¬Έμ μμ νμ
μ μ΄μ©ν κ²½μ° μκ° μ΄κ³Όκ° λ°μνκ² λ©λλ€.
λμ ν¬ ν¬μΈν°
λ₯Ό μ΄μ©ν΄μ N
μ μ΄κ³Όν κ²½μ° μνλ²³μ μ’
λ₯κ° N
λ³΄λ€ μμμ§ λκΉμ§ left
λ₯Ό μ¦κ°μν€κ³ N
λ³΄λ€ κ°κ±°λ μμ κ²½μ° right
μ μ¦κ°μν€λ λ°©λ²μ μ¬μ©νλ©΄ μ΅μ νκ° κ°λ₯ν©λλ€.
μ΄λ κ° μνλ²³μ λ±μ₯ νμλ₯Ό κΈ°λ‘νκΈ° μν΄ deque
λ₯Ό κ°μΌλ‘ μ¬μ©νλ dict
λ₯Ό μ¬μ©νμ΅λλ€.
κ°κ°μ deque
μλ μνλ²³μ μΈλ±μ€κ° μ μ₯λλ©° μνλ²³μ μ’
λ₯κ° N
λ³΄λ€ λ§μμ‘μ μ
κ°μ₯ μΌμͺ½μ μλ μνλ²³μ ν€λ‘ νλ deque
μμ νλ dequeue
ν©λλ€.
μ΄λ¬ν μ°μ°μ N
λ³΄λ€ κ°κ±°λ μμμ§λκΉμ§ λ°λ³΅νλ©° κΈΈμ΄λ₯Ό νλμ© μ€μ¬κ°λ©° κ²μ¬νλ©΄ λ©λλ€.
(λ§μ½ deque
κ° λΉμμ§ κ²½μ° ν΄λΉνλ μνλ²³μ dict
μμ μ§μμ€λλ€.)
μ½λ
import sys
from collections import deque
N = int(input())
S = sys.stdin.readline().strip()
def solution():
memo = {}
left, right = 0, 0
answer = 1
memo[S[right]] = deque([0])
while left <= right:
right += 1
if right >= len(S):
break
if S[right] in memo:
memo[S[right]].append(right)
else:
memo[S[right]] = deque([right])
# λ²μκΈ° μΈμ λ²μλ₯Ό λμ΄μ€ κ²½μ°
while len(memo) > N and left <= right:
leftmost = S[left]
memo[leftmost].popleft()
if not memo[leftmost]:
memo.pop(leftmost)
left += 1
length = right - left + 1
answer = max(answer, length)
return answer
print(solution())
'π algorithm > boj' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
BOJ 14620 - κ½κΈΈ (0) | 2021.03.14 |
---|---|
BOJ 2688 - μ€μ΄λ€μ§ μμ (0) | 2021.03.14 |
BOJ 17086 - μκΈ° μμ΄2 (0) | 2021.03.08 |
BOJ 13335 - νΈλ (0) | 2021.03.08 |
BOJ 6497 - μ λ ₯λ (0) | 2021.03.08 |
π¬ λκΈ