a-073-permutations2026-07-29mediumleetcode #46neetcode150
순열
#array#backtracking
01
문제
· problem고유한 정수들로 이루어진 배열 nums가 주어질 때, 가능한 모든 순열을 반환하세요. 답은 어떤 순서로든 반환할 수 있습니다.
제약
- · 1 ≤ nums.length ≤ 6
- · -10 ≤ nums[i] ≤ 10
- · All integers in nums are unique
// 지문은 본인 언어 요약 — 원문은 위 링크에서
입출력 예시
02
사전 사고
· pre-solve● 1리스트 출력→● 2선택→● 3정답 공개
- ☐순열이란 정확히 무엇인가요?
- ☐모든 입력 정수는 고유한가요?
- ☐출력 순열들의 순서가 정해져 있나요?
- ☐한 순열 내에서 같은 원소를 여러 번 사용할 수 있나요?
- ☐입력 배열을 수정해도 괜찮나요?
- ☐반환된 배열들이 원본 참조여도 되나요?
던질 질문에 체크하고 확인을 누르세요
// 결과는 세션 메모리만 — 새로고침하면 초기화됩니다 (반복 학습)
03
논리 구조
· logic● 1슬롯 출력→● 2슬롯별 선택→● 3정답 공개
// 각 슬롯에 들어갈 코드 한 줄을 골라 알고리즘 흐름을 합성해보세요. 코드는 안 짜지만 논리 뼈대는 직접.
step 1· 결과 초기화
○
res = []
○
res = {}○
res = None
○
res = nums[:]
step 2· 기저 사례: 원소 1개
○
if len(nums) == 1:
○
if len(nums) == 0:
○
if len(nums) <= 1:
○
if len(nums) > 1:
step 3· 각 원소마다 반복
○
for i in range(len(nums)):
○
for n in nums:
○
for i in range(len(nums) - 1):
○
while i < len(nums):
step 4· 맨 앞 원소 제거│ 중첩
○
n = nums.pop(0)
○
n = nums[i]
○
n = nums.pop()
○
n = nums.pop(i)
step 5· 재귀 호출로 부분 순열 구하기│ 중첩
○
perms = self.permute(nums)
○
perms = self.permute([])
○
perms = self.permute(nums[1:])
○
perms = permute(nums)
step 6· 부분 순열에 현재 원소 추가│ 중첩
○
perm.append(n)
○
perms.append(n)
○
perm.insert(0, n)
○
perm.extend([n, n])
step 7· 다음 반복을 위해 원소 복원│ 중첩
○
nums.append(n)
○
nums.pop()
○
nums.insert(0, n)
○
pass
각 슬롯에 한 줄씩 골라보세요
// format: slot — 다른 패턴(재귀·DP 등) 은 ordering·state-first 등 별도 format. ADR-08 후속.
04
문제풀이 · 트레이스
· solve머릿속 dry-run 케이스
// 각 케이스를 머릿속으로 따라가보세요. 막히면 아래 worked example 펼침.
case 1
[1,2,3]→
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
case 2
[0,1]→
[[0,1],[1,0]]
case 3
[1]→
[[1]]
// UI 가 walk-through 안 함 — 학습자가 머릿속으로. 막히면 worked example 펼침.