πŸ’†πŸ»‍♂️ ν”Ό-μ—μŠ€/🐣 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[μŠ€μœ„ν”„νŠΈ μ•Œκ³ λ¦¬μ¦˜] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€: νŠœν”Œ

κ°œλ°œν•˜λŠ” ν›ˆμ΄ 2021. 8. 27. 00:32

문제

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - νŠœν”Œ

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

문제 μ„€λͺ…

μ…€μˆ˜μžˆλŠ” μˆ˜λŸ‰μ˜ μˆœμ„œμžˆλŠ” μ—΄κ±° λ˜λŠ” μ–΄λ–€ μˆœμ„œλ₯Ό λ”°λ₯΄λŠ” μš”μ†Œλ“€μ˜ λͺ¨μŒμ„ νŠœν”Œ(tuple)이라고 ν•©λ‹ˆλ‹€. n개의 μš”μ†Œλ₯Ό κ°€μ§„ νŠœν”Œμ„ n-νŠœν”Œ(n-tuple)이라고 ν•˜λ©°, λ‹€μŒκ³Ό 같이 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • (a1, a2, a3, ..., an)

νŠœν”Œμ€ λ‹€μŒκ³Ό 같은 μ„±μ§ˆμ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

  1. μ€‘λ³΅λœ μ›μ†Œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. ex : (2, 3, 1, 2)
  2. μ›μ†Œμ— μ •ν•΄μ§„ μˆœμ„œκ°€ 있으며, μ›μ†Œμ˜ μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ μ„œλ‘œ λ‹€λ₯Έ νŠœν”Œμž…λ‹ˆλ‹€. ex : (1, 2, 3) ≠ (1, 3, 2)
  3. νŠœν”Œμ˜ μ›μ†Œ κ°œμˆ˜λŠ” μœ ν•œν•©λ‹ˆλ‹€.

μ›μ†Œμ˜ κ°œμˆ˜κ°€ n개이고, μ€‘λ³΅λ˜λŠ” μ›μ†Œκ°€ μ—†λŠ” νŠœν”Œ (a1, a2, a3, ..., an)이 μ£Όμ–΄μ§ˆ λ•Œ(단, a1, a2, ..., an은 μžμ—°μˆ˜), μ΄λŠ” λ‹€μŒκ³Ό 같이 μ§‘ν•© 기호 '{', '}'λ₯Ό μ΄μš©ν•΄ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}

예λ₯Ό λ“€μ–΄ νŠœν”Œμ΄ (2, 1, 3, 4)인 경우 μ΄λŠ”

  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}

와 같이 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, 집합은 μ›μ†Œμ˜ μˆœμ„œκ°€ λ°”λ€Œμ–΄λ„ μƒκ΄€μ—†μœΌλ―€λ‘œ

  • {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}
  • {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}
  • {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}}

λŠ” λͺ¨λ‘ 같은 νŠœν”Œ (2, 1, 3, 4)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

νŠΉμ • νŠœν”Œμ„ ν‘œν˜„ν•˜λŠ” 집합이 λ‹΄κΈ΄ λ¬Έμžμ—΄ sκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, sκ°€ ν‘œν˜„ν•˜λŠ” νŠœν”Œμ„ 배열에 λ‹΄μ•„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

풀이

λ¬Έμ œμ—μ„œ μ€‘λ³΅λ˜λŠ” μ›μ†Œκ°€ μ—†λŠ” νŠœν”Œμ€

  • {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}}

μ΄λ ‡κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€λŠ” κ²ƒμ—μ„œ 힌트λ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€. μˆœμ„œλ₯Ό μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— a1,...,an에 도달할 λ•ŒκΉŒμ§€ μ›μ†Œκ°€ ν•˜λ‚˜μžˆλŠ” 것뢀터 μ°¨λ‘€λŒ€λ‘œ μ–»μ–΄λ‚΄λ©΄ μ›μ†Œμ˜ μˆœμ„œλ₯Ό μ•Œμ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄,

  • {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}

의 경우λ₯Ό μƒκ°ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • μ›μ†Œκ°€ ν•˜λ‚˜λΏμΈ {2}λ₯Ό 뽑아내고 μ›μ†Œλ₯Ό κΊΌλ‚΄ μ •λ‹΅ 배열에 λ„£μŠ΅λ‹ˆλ‹€. [2]
  • 2의 μˆœμ„œλ₯Ό μ•Œμ•„λƒˆμœΌλ‹ˆ 2κ°€ ν¬ν•¨λ˜μ–΄μžˆλŠ” {2, 1} 을 μ‚¬μš©ν•˜λ©΄ 1의 μˆœμ„œλ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. μ€‘λ³΅λ˜λŠ” 2λŠ” λ„£μ§€ μ•Šκ³  1만 μ •λ‹΅ 배열에 λ„£μŠ΅λ‹ˆλ‹€. [2, 1]
  • 2와 1을 ν¬ν•¨ν•˜λŠ” λ‹€μŒ νŠœν”ŒμΈ {2, 1, 3}을 μ‚¬μš©ν•˜λ©΄ [2, 1, 3] 을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 그리고 λ§ˆμ§€λ§‰μœΌλ‘œ {2, 1, 3, 4}λ₯Ό μ‚¬μš©ν•˜λ©΄ [2, 1, 3, 4]λ₯Ό μ–»κ²Œλ©λ‹ˆλ‹€.

κ²°κ΅­ μ£Όμ–΄μ§€λŠ” λ¬Έμžμ—΄μ„ νŠœν”Œλ‹¨μœ„λ‘œ λΆ„λ¦¬ν•œ 뒀에, 내뢀에 μ›μ†Œμ˜ κ°œμˆ˜κ°€ μž‘μ€ 것뢀터 μ€‘λ³΅λ˜μ§€ μ•Šκ²Œ μ°¨λ‘€λŒ€λ‘œ 정닡배열에 λ„£μ–΄μ£ΌλŠ” κ²ƒμœΌλ‘œ 정닡을 ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œ