πλ¬Έμ νμνκΈ°
- μ΄λ€ μμ΄ xμ λΆλΆ μμ΄ = xμ λͺλͺ μμλ€μ μ κ±°νκ±°λ, μ κ±°νμ§ μκ³ λ¨μ μμλ€μ΄ μλμ μμλ₯Ό μ μ§νμ¬ μ»μ μ μλ μλ‘μ΄ μμ΄
- μλμ 쑰건μ λ§μ‘±νλ μμ΄ x = μ€ν μμ΄
- λΉ μμ΄μ΄ μλ xμ κΈΈμ΄κ° 2 μ΄μμ μ§μ
- xμ κΈΈμ΄λ₯Ό 2nμ΄λΌ ν λ, {x[0], x[1]}, {x[2], x[3]}, ..., {x[2n-2], x[2n-1]}μ κ΅μ§ν©μ μμμ κ°μκ° 1 μ΄μ
- x[0] != x[1], x[2] != x[3], ... , x[2n-2] != x[2n-1]
- ex) [1, 2, 1, 3, 4, 1, 1, 3] / {1, 2}, {1, 3}, {4, 1}, {1, 3}μ κ΅μ§ν©μ 1, κ° μ§ν© λ΄ μ«μκ° μλ‘ λ€λ¦
λ§€κ°λ³μ
- 1μ°¨μ μ μ λ°°μ΄ aκ° λ§€κ° λ³μλ‘ μ£Όμ΄μ§
- 1 ≤ aμ κΈΈμ΄ ≤ 500,000
- 0 ≤ aμ λͺ¨λ μ < aμ κΈΈμ΄
λ°νκ°
- aμ λͺ¨λ λΆλΆ μμ΄ μ€μμ κ°μ₯ κΈΈμ΄κ° κΈ΄ μ€ν μμ΄μ κΈΈμ΄
- λ§μ½ aμ λͺ¨λ λΆλΆ μμ΄ μ€ μ€ν μμ΄μ΄ μλ€λ©΄ 0
νμ΄ λ°©λ² μκ°ν΄λ³΄κΈ°
μ£Όμ΄μ§ aμ λͺ¨λ λΆλΆ μμ΄μ ꡬν΄μ κΈΈμ΄κ° κ°μ₯ κΈ΄ μ€ν μμ΄μ ꡬνλ κ²μ λ§€μ° λΉν¨μ¨μ μ΄λ€. μ€ν μμ΄μ μμλλ‘ λκ°μ© λ¬Άμμ λ, κ·Έ μ§ν©λ€μ κ΅μ§ν©μ μμμ κ°μκ° 1μ΄μμ΄μ΄μΌ νλ―λ‘, λͺ¨λ μ§ν©μ κ²ΉμΉλ μ«μκ° νλμ© κΌ λ€μ΄κ°μΌ νλ€λ λ§μ΄ λλ€. aμ μμλ€μ λΉλμλ₯Ό κ΅¬ν΄ κ°μ₯ λΉλκ° λμ μμλλ‘, ν΄λΉ μ«μκ° κ΅μ§ν©μ ν¬ν¨λλ€κ³ κ°μ νκ³ μ€ν μμ΄μ μ°Ύμλκ°λ κ²μ΄ μ 리νλ€.
π μ½λ μ€κ³νκΈ°
- aμ μμλ€μ λΉλμλ₯Ό collections.Counterλ‘ κ΅¬ν΄ countsμ μ μ₯νλ€.
- μ€ν μμ΄μ μ΅λ κΈΈμ΄λ₯Ό μ μ₯ν λ³μ max_lengthλ₯Ό 0μΌλ‘ μ΄κΈ°ννλ€.
- countsλ₯Ό ν λλ‘, λΉλμκ° κ°μ₯ λμ μμλλ‘ νλμ μ«μ(num)κ° κ΅μ§ν©μ ν¬ν¨λλ€κ³ κ°μ νκ³ μ€ν μμ΄μ κΈΈμ΄λ₯Ό ꡬνλ€.
- λ§μ½ (νμ¬ μ«μμ λΉλμ * 2)λ₯Ό νμ λ, νμ¬ max_lengthμ κΈΈμ΄λ₯Ό λμ§ λͺ»νλ€λ©΄ 건λλ΄λ€.
- κ΅μ§ν©μ λ€μ΄κ°λ μ«μκ° numμΌλμ μ€ν μμ΄μ κΈΈμ΄λ₯Ό μ μ₯ν λ³μ lengthλ₯Ό 0μΌλ‘ μ΄κΈ°ννλ€.
- aμ λͺ¨λ μμλ₯Ό νλμ© λλ©΄μ, a[i]κ° numμ΄κ±°λ a[i+1]μ΄ numμ΄κ³ , a[i]μ a[i+1]μ΄ μΌμΉνμ§ μμΌλ©΄, lengthμ 2λ₯Ό λνκ³ , νμ μμ μΈλ±μ€(i)μλ 2λ₯Ό λνλ€.
- 3λ²μ 쑰건μ λ§μ‘±νμ§ λͺ»νμΌλ©΄ iμ 1μ λνλ€.
- λͺ¨λ μμμ λν νμμ΄ λλλ©΄ lengthλ₯Ό ν λλ‘ max_lengthμ λΉκ΅νμ¬ κ°±μ νλ€.
- max_lengthλ₯Ό λ°ννλ€.
πμλνμ°¨ μμ μ¬ν
1νμ°¨
λΉλμλ₯Ό κ³μ°ν΄μΌ νλ€λ μκ°μ μ ν νμ§ λͺ»ν΄μ, λ€λ₯Έ λ°©λ²μΌλ‘ μλν΄λ΄€μ§λ§ μ νλ¦¬μ§ μμ ννΈλ₯Ό λ°μλ€.
2νμ°¨
λΉλμ κ³μ°μ νμ§λ§, κ΅μ§ν©μ ν¬ν¨λ μ«μμ λΉλμ * 2κ° max_lengthλ³΄λ€ μκ±°λ κ°μ λλ₯Ό κ°μ§μΉκΈ° ν΄μ£Όμ§ μμ μκ° μ΄κ³Όκ° λ°μνλ€.
πμ λ΅ μ½λ
from collections import Counter
def solution(a):
if len(a) == 1:
return 0
counts = Counter(a)
max_length = 0
for num, freq in counts.items():
if freq * 2 <= max_length:
continue
length = 0
i = 0
while i < len(a)-1:
if (a[i] == num or a[i+1] == num) and a[i] != a[i+1]:
length += 2
i += 2
else:
i += 1
max_length = max(max_length, length)
return max_length