DevYoon
[νλ‘κ·Έλλ¨Έμ€] νΌμ λκΈ°μ λ¬μΈ (Python) λ³Έλ¬Έ
link π https://school.programmers.co.kr/learn/courses/30/lessons/131130
λ¬Έμ μ€λͺ
νΌμμλ μ λ Έλ λ²ν¬λ μ΄λ λ 방ꡬμμ μλ μ«μ μΉ΄λ λλ―Έλ₯Ό 보λλ νΌμ ν μ μλ μ¬λ―Έμλ κ²μμ μκ°ν΄λμ΅λλ€.
μ«μ μΉ΄λ λλ―Έμλ μΉ΄λκ° μ΄ 100μ₯ μμΌλ©°, κ° μΉ΄λμλ 1λΆν° 100κΉμ§ μ«μκ° νλμ© μ νμμ΅λλ€. 2 μ΄μ 100 μ΄νμ μμ°μλ₯Ό νλ μ ν΄ κ·Έ μλ³΄λ€ μκ±°λ κ°μ μ«μ μΉ΄λλ€μ μ€λΉνκ³ , μ€λΉν μΉ΄λμ μλ§νΌ μμ μμλ₯Ό μ€λΉνλ©΄ κ²μμ μμν μ μμΌλ©° κ²μ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
μ€λΉλ μμμ μΉ΄λλ₯Ό ν μ₯μ© λ£κ³ , μμλ₯Ό 무μμλ‘ μμ΄ μΌλ ¬λ‘ λμ΄ν©λλ€. μμκ° μΌλ ¬λ‘ λμ΄λλ©΄ μμκ° λμ΄λ μμμ λ°λΌ 1λ²λΆν° μμ°¨μ μΌλ‘ μ¦κ°νλ λ²νΈλ₯Ό λΆμ λλ€.
κ·Έ λ€μ μμμ μμλ₯Ό νλ μ ννμ¬ μ νν μμ μμ μ«μ μΉ΄λλ₯Ό νμΈν©λλ€. λ€μμΌλ‘ νμΈν μΉ΄λμ μ ν λ²νΈμ ν΄λΉνλ μμλ₯Ό μ΄μ΄ μμ λ΄κΈ΄ μΉ΄λμ μ ν μ«μλ₯Ό νμΈν©λλ€. λ§μ°¬κ°μ§λ‘ μ«μμ ν΄λΉνλ λ²νΈλ₯Ό κ°μ§ μμλ₯Ό κ³μν΄μ μ΄μ΄κ°λ©°, μ΄μ΄μΌ νλ μμκ° μ΄λ―Έ μ΄λ €μμ λκΉμ§ λ°λ³΅ν©λλ€.
μ΄λ κ² μ° μμλ€μ 1λ² μμ κ·Έλ£Ήμ λλ€. μ΄μ 1λ² μμ κ·Έλ£Ήμ λ€λ₯Έ μμλ€κ³Ό μμ΄μ§ μλλ‘ λ°λ‘ λ‘λλ€. λ§μ½ 1λ² μμ κ·Έλ£Ήμ μ μΈνκ³ λ¨λ μμκ° μμΌλ©΄ κ·Έλλ‘ κ²μμ΄ μ’ λ£λλ©°, μ΄λ νλνλ μ μλ 0μ μ λλ€.
κ·Έλ μ§ μλ€λ©΄ λ¨μ μμ μ€ λ€μ μμμ μμ νλλ₯Ό κ³¨λΌ κ°μ λ°©μμΌλ‘ μ΄λ―Έ μ΄λ €μλ μμλ₯Ό λ§λ λκΉμ§ μμλ₯Ό μ½λλ€. μ΄λ κ² μ° μμλ€μ 2λ² μμ κ·Έλ£Ήμ λλ€.
1λ² μμ κ·Έλ£Ήμ μν μμμ μμ 2λ² μμ κ·Έλ£Ήμ μν μμμ μλ₯Ό κ³±ν κ°μ΄ κ²μμ μ μμ λλ€.
μμ μμ λ€μ΄μλ μΉ΄λ λ²νΈκ° μμλλ‘ λ΄κΈ΄ λ°°μ΄ cardsκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, λ²ν¬κ° μ΄ κ²μμμ μ»μ μ μλ μ΅κ³ μ μλ₯Ό ꡬν΄μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- 2 ≤ cardsμ κΈΈμ΄ ≤ 100
- cardsμ μμλ cardsμ κΈΈμ΄ μ΄νμΈ μμμ μμ°μμ λλ€.
- cardsμλ μ€λ³΅λλ μμκ° μ‘΄μ¬νμ§ μμ΅λλ€.
- cards[i]λ i + 1λ² μμμ λ΄κΈ΄ μΉ΄λμ μ ν μ«μλ₯Ό μλ―Έν©λλ€.
def solution(cards):
answer = 0
length = len(cards)
for first in range(length):
# 1λ² κ·Έλ£Ή visit 체ν¬
visited01 = [0] * length
pick = cards[first]
# λ°©λ¬Ένλ μμλ₯Ό λ€μ λ°©λ¬Ένλ€λ©΄ break
while visited01[pick - 1] == 0:
# λ°©λ¬Έ 체ν¬
visited01[pick - 1] = 1
# λ€μ λ°©λ¬Έν μμ λ²νΈ
pick = cards[pick - 1]
for second in range(first + 1, length):
# 2λ² κ·Έλ£Ή visit 체ν¬
visited02 = visited01[:]
pick = cards[second]
# λ°©λ¬Ένλ μμλ₯Ό λ€μ λ°©λ¬Ένλ€λ©΄ break
while visited02[pick - 1] == 0:
# λ°©λ¬Έ 체ν¬
visited02[pick - 1] = 2
# λ€μ λ°©λ¬Έν μμ λ²νΈ
pick = cards[pick - 1]
# 1λ² κ·Έλ£Ήμ κ°μ * 2λ² κ·Έλ£Ήμ κ°μ
score = visited01.count(1) * visited02.count(2)
# max κ°±μ
answer = max(answer, score)
return answer
- 1λ² κ·Έλ£Ήκ³Ό 2λ² κ·Έλ£Ήμ λλμ΄ λ¬Έμ μ€λͺ λλ‘ μμλ₯Ό μ΄μ΄λ³΄κ³ , κ° κ·Έλ£Ήμ κ°μλ₯Ό κ³±ν΄ maxλ₯Ό κ°±μ νλ€.