< All posts

46. Permutations

문제 μ„€λͺ…

μˆ«μžλ“€μ΄ μ£Όμ–΄μ§€λ©΄ κ·Έ μˆ«μžλ“€λ‘œ λ§Œλ“€ 수 μžˆλŠ” λͺ¨λ“  μˆœμ—΄μ„ λ°˜ν™˜ν•˜λŠ” λ¬Έμ œλ‹€.

46

풀이 및 ν•΄μ„€

이 λ¬Έμ œλŠ” λ°±νŠΈλž˜ν‚Ή(Backtracking) 기법을 μ‚¬μš©ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ£Όμ–΄μ§„ μˆ«μžλ“€λ‘œ λ§Œλ“€ 수 μžˆλŠ” λͺ¨λ“  μˆœμ—΄μ„ μž¬κ·€μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.

  • λ°±νŠΈλž˜ν‚Ή ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜μ—¬ μž¬κ·€μ μœΌλ‘œ κ°€λŠ₯ν•œ λͺ¨λ“  μˆœμ—΄μ„ μƒμ„±ν•©λ‹ˆλ‹€.
  • κΈ°λ³Έ μ‚¬λ‘€λ‘œ, ν˜„μž¬ 경둜의 길이가 μ£Όμ–΄μ§„ μˆ«μžλ“€μ˜ 길이와 κ°™μ•„μ§€λ©΄ ν˜„μž¬ 경둜λ₯Ό κ²°κ³Ό λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•©λ‹ˆλ‹€.
  • μž¬κ·€ λ‹¨κ³„μ—μ„œλŠ” μ£Όμ–΄μ§„ μˆ«μžλ“€ μ€‘μ—μ„œ 아직 κ²½λ‘œμ— ν¬ν•¨λ˜μ§€ μ•Šμ€ μˆ«μžλ“€μ„ μ„ νƒν•˜μ—¬ κ²½λ‘œμ— μΆ”κ°€ν•˜κ³  μž¬κ·€μ μœΌλ‘œ λ‹€μŒ 숫자λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
  • μ΅œμ’…μ μœΌλ‘œ λͺ¨λ“  κ°€λŠ₯ν•œ μˆœμ—΄μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

핡심: ν˜„μž¬ κ²½λ‘œμ— ν¬ν•¨λ˜μ§€ μ•Šμ€ μˆ«μžλ“€μ„ μ„ νƒν•˜μ—¬ μž¬κ·€μ μœΌλ‘œ 탐색해야 ν•œλ‹€.

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        res = []

        def backtrack(path, visited):
            if len(path)==len(nums):
                res.append(path)
                return
            
            for num in nums:
                if num not in visited:
                    visited.add(num)
                    backtrack(path+[num], visited)
                    visited.remove(num)

        backtrack([], set())
        return res

λ³΅μž‘λ„

c

μ‹œκ°„λ³΅μž‘λ„

  • O(k * k!) ; kλŠ” nums의 κΈΈμ΄μž…λ‹ˆλ‹€. λͺ¨λ“  μˆœμ—΄μ˜ κ°œμˆ˜λŠ” k!이고, 각 μˆœμ—΄μ„ μƒμ„±ν•˜λŠ” 데 O(k)의 μ‹œκ°„μ΄ μ†Œμš”λ©λ‹ˆλ‹€.

κ³΅κ°„λ³΅μž‘λ„

  • O(k) ; μž¬κ·€ 호좜 μŠ€νƒκ³Ό λ°©λ¬Έ 집합에 μ‚¬μš©λ˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.

Constraint Analysis

Constraints:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
All the integers of nums are unique.

References

Β© 2025 HyunJoon Sung. All Rights Reserved.

GitHub