Competitive Programming Academy · 강의

순열과 N-Queens 발상

항목을 배치하고 충돌이 생기면 백트래킹합니다

레슨 3/413개 단계

순열과 N-Queens 발상은(는) CoddyKit의 무료 Competitive Programming Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Competitive Programming Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

부분집합에서 순서 배열로

순열은 모든 요소를 어떤 순서로 배열한 것입니다. 순열 생성은 부분집합 다음에 배우는 백트래킹 기술입니다. 🔀

순열은 몇 개일까요

n개의 항목으로 만들 수 있는 순열은 n 팩토리얼개입니다. 첫 번째 위치에는 n가지, 다음 위치에는 n-1가지 선택이 있고 이런 방식이 계속되기 때문입니다. 개수는 빠르게 증가합니다.

한 번에 하나씩 배치하기

재귀는 위치를 왼쪽에서 오른쪽으로 채웁니다. 각 단계에서 사용하지 않은 요소를 하나 골라 배치하고, 나머지 요소에 대해 재귀 호출을 합니다.

사용된 요소 추적하기

불리언 사용 여부 배열은 이미 배치된 요소를 표시하므로, 모든 순열에서 각 요소가 정확히 한 번씩 나타납니다.

코드로 구현하는 순열

이 백트래킹은 사용하지 않은 값을 배치하고 재귀 호출을 한 다음, 다음 분기에서 사용할 수 있도록 해당 값을 다시 해제합니다.

def perm(cur):
    if len(cur) == n:
        out.append(cur[:]); return
    for x in a:
        if x not in cur:
            perm(cur + [x])

허용된다면 itertools 사용하기

빠르게 문제를 풀어야 할 때는 Python의 itertools.permutations가 직접 재귀를 작성하지 않아도 모든 순서를 생성해 줍니다.

from itertools import permutations
for p in permutations(a):
    print(p)

N-퀸 문제

N-퀸 문제는 서로 공격할 수 없도록 n × n 체스판에 n개의 퀸을 배치하는 문제입니다. 고전적인 백트래킹 퍼즐입니다. 👑

행마다 퀸 하나 배치하기

두 퀸이 같은 행을 공유하지 않으므로 행마다 퀸 하나를 정확히 배치하고 열만 선택하면 됩니다. 이렇게 하면 탐색 범위가 크게 줄어듭니다.

세 가지 충돌 확인하기

배치하기 전에 이미 사용된 열이나 대각선이라면 거부합니다. 집합을 사용하여 사용된 열과 두 방향의 대각선을 추적합니다.

if c in cols or r-c in d1 or r+c in d2:
    continue

막다른 길에서 백트래킹하기

어떤 열도 한 행에 배치할 수 없다면 해당 분기는 실패합니다. 백트래킹하여 마지막 퀸을 제거하고 다음 선택지를 시도합니다.

공통 패턴

순열과 N-퀸 문제에는 선택하고, 재귀 호출하고, 되돌리는 하나의 공통 구조가 있습니다. 이 구조를 이해하면 대부분의 배치 퍼즐에 같은 틀을 적용할 수 있습니다.

빠른 확인

N-퀸 문제에서는 왜 행마다 퀸을 하나만 배치할까요?

복습: 선택하고, 재귀 호출하고, 되돌리기

사용하지 않은 항목을 배치하여 순열을 생성하고, N-퀸 문제도 충돌 확인과 함께 같은 선택-재귀 호출-되돌리기 패턴을 사용한다는 것을 배웠습니다. 🎯

무료로 시작

AI 튜터와 함께 Python을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
30
레슨
120

자주 묻는 질문

“순열과 N-Queens 발상” 강의는 무료인가요?

네 — “순열과 N-Queens 발상” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Competitive Programming Academy 강의 전체를 잠금 해제할 수 있습니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“순열과 N-Queens 발상”에서 뭘 배우나요?

항목을 배치하고 충돌이 생기면 백트래킹합니다 브라우저에서 직접 실행하는 실습 코드로 Competitive Programming Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Competitive Programming Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Competitive Programming Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“순열과 N-Queens 발상” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Competitive Programming Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Competitive Programming Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 재귀적으로 사고하기: 기본과 재귀 호출
  2. 모든 부분집합 생성하기
  3. 순열과 N-Queens 발상
  4. 시간 제한을 통과하도록 가지치기하기
← Competitive Programming Academy(으)로 돌아가기