P와 NP는 각각 어떤 결정 문제의 부류인가요?
P는 입력 크기에 대한 다항 시간 알고리즘으로 풀 수 있는 문제들의 부류입니다. NP는 예라는 답에 대해 다항 크기의 증명서를 다항 시간에 확인할 수 있는 문제들의 부류입니다.
적용 조건·범위: 분석 조건: n≥3의 Boolean 정사각 행렬과 도시 인덱스 순환 후보입니다. 결정 문제의 효율적 후보 검증을 보여 주며 탐색 알고리즘이나 미해결 문제의 해답은 아닙니다.
읽기 전에 알아두면 좋아요
아래 개념이 익숙하면 본문을 바로 읽으세요. 낯선 개념만 링크에서 복습하면 됩니다.
- JavaScript 그래프 구현: 인접 리스트·인접 행렬 비교와 BFS그래프는 점인 정점과 점 사이의 연결인 간선으로 관계를 나타냅니다.
- JavaScript 배열: 인덱스 조회와 삽입·삭제 비용배열은 여러 값을 순서대로 담습니다. 인덱스로 값을 읽고 반복문으로 하나씩 살펴봅니다.
개념과 예제는 실행하지 않아도 읽을 수 있습니다. 내 컴퓨터·터미널에서 직접 실행하는 과정은 선택 실습입니다.
과정 위치와 선택 복습 안내
과정 위치: 유량·상태 압축과 계산 복잡도 (선택) · 알고리즘 개념
과정 위치는 이 글이 속한 묶음입니다. 이 단계의 모든 개념을 먼저 읽을 필요는 없습니다. 위에 연결한 개념 중 낯선 내용만 복습하세요. 문제의 조건·상태·갱신 순서는 익숙한 언어로 설명하면 됩니다.
JavaScript로 문법·실행 복습하기 (선택)
개념 글의 코드는 JavaScript 예시입니다. 문제 화면에서는 JavaScript·Python·Java·C++·C# 중 익숙한 언어의 함수를 작성하세요. 본문의 Node.js 입출력 예시는 로컬 실행을 위한 별도 안내입니다.

P와 NP를 비교할 때의 질문은 “정답 후보를 효율적으로 확인할 수 있는 문제를 효율적으로 풀 수도 있는가?”입니다. NP를 단순히 어렵거나 느린 문제의 이름으로 쓰면 의미가 달라집니다.
선수 지식: 입력 크기와 다항·지수 증가의 차이, 그래프의 정점·간선을 알아야 합니다.
- 찾기와 검증을 다른 작업으로 구분합니다.
- 결정 문제와 최소 비용을 구하는 최적화 문제를 구분합니다.
제시된 방문 순서를 확인하는 일부터 해 봅니다
도시를 모두 한 번씩 지나 출발점으로 돌아오는 순서가 있는지 묻는다고 해 보겠습니다. 누군가 [0,1,2,0]을 후보로 내놓으면 모든 순서를 새로 찾지 않고도 각 도시가 한 번씩 나오는지, 이어지는 간선이 있는지, 마지막이 출발점인지 확인할 수 있습니다. 이 후보처럼 정답 확인에 함께 제공하는 자료를 증명서라고 부릅니다.

| 후보 | 확인 결과 | 이유 |
|---|---|---|
| [0,1,2,0] | 간선이 모두 있으면 통과 | 각 도시 한 번, 출발점 복귀 |
| [0,1,1,0] | 거절 | 1을 중복 방문하고 2는 빠짐 |
| [0,1,2,1] | 거절 | 출발점으로 닫히지 않음 |
검사 함수가 true를 돌려줬다는 것은 제시된 후보가 조건을 만족한다는 뜻입니다. false이면 그 후보가 틀렸다는 뜻일 뿐, 다른 후보까지 모두 없다는 증거는 아닙니다. 이 차이를 놓치면 검증 함수를 전체 해법처럼 오해하게 됩니다.
P도 NP에 포함됩니다
여기서는 예·아니요로 답하는 결정 문제를 이야기합니다. P는 입력 크기에 대한 다항 시간 알고리즘으로 풀 수 있는 문제들의 부류입니다. NP는 예라는 답에 대해 다항 크기의 증명서를 다항 시간에 확인할 수 있는 문제들의 부류입니다. P 문제는 답을 계산해 확인할 수 있으므로 P에 속하면 NP에도 속합니다.

P=NP인지는 아직 해결되지 않았습니다. 따라서 어떤 알고리즘을 아직 모른다는 이유만으로 그 문제에 빠른 알고리즘이 존재하지 않는다고 단정하면 안 됩니다. 여기서 “빠름”은 특정 PC의 몇 밀리초보다 입력이 커질 때의 점근적 다항 시간 의미입니다. 높은 차수나 큰 상수 때문에 다항 알고리즘도 실용적으로 느릴 수 있습니다.
가장 싼 경로와 예산 안의 경로 존재는 다른 질문입니다
외판원의 최소 비용을 직접 구하는 것은 최적화 문제입니다. “비용 K 이하의 순환이 존재하는가?”는 결정 문제입니다. P·NP의 정의를 적용할 때는 이처럼 어떤 질문을 분류하는지 먼저 밝혀야 합니다. NP-hard라는 말도 “NP와 똑같다”거나 “컴퓨터가 못 푼다”는 일상적 표현으로 바꿀 수는 없습니다.

아래 코드는 3개 이상 정점의 Boolean 인접 행렬과 후보 순환을 받는 작은 검증 예제입니다. 그래프 모양을 확인하는 부분까지 포함하면 O(n²), 후보 자체의 방문·간선 확인은 O(n)입니다. 이것은 P와 NP의 관계를 증명하는 코드가 아니라 찾기와 확인의 입력·작업이 어떻게 다른지 경험하기 위한 예제입니다.
전체 코드와 직접 실행
개념을 읽었다면 아래 예제를 직접 실행하며 상태 변화를 확인할 수 있습니다.
전체 JavaScript 코드와 실행 방법 펼치기
별도 패키지는 필요하지 않습니다. Node.js가 처음이라면 브라우저와 Node.js 시작 안내부터 확인하세요.
cycle-certificate.mjs 파일을 만들고 아래 전체 코드를 저장합니다.
function checkHamiltonianCycle(graph, route) {
if (!Array.isArray(graph) || graph.length < 3 || !Array.isArray(route)) return false;
const n = graph.length;
for (let i = 0; i < n; i++) {
if (!Array.isArray(graph[i]) || graph[i].length !== n) return false;
for (let j = 0; j < n; j++) if (typeof graph[i][j] !== 'boolean') return false;
}
if (route.length !== n + 1 || route[0] !== route[n]) return false;
const seen = new Set();
for (let i = 0; i < n; i++) {
const from = route[i], to = route[i + 1];
if (!Number.isInteger(from) || from < 0 || from >= n || !Number.isInteger(to) || to < 0 || to >= n) return false;
if (seen.has(from) || graph[from][to] !== true) return false;
seen.add(from);
}
return seen.size === n;
}
const graph = [[false, true, true], [true, false, true], [true, true, false]];
console.log(checkHamiltonianCycle(graph, [0, 1, 2, 0]));
console.log(checkHamiltonianCycle(graph, [0, 1, 1, 0]));
파일이 있는 폴더의 터미널에서 실행합니다.
node cycle-certificate.mjs
기대 출력
true
false
비용과 적용 범위
시간: 예제의 행렬 형식 검사 O(n²), 후보 경로 검사 O(n)입니다.

공간: 방문 집합 O(n) 추가 공간입니다.
분석 조건: n≥3의 Boolean 정사각 행렬과 도시 인덱스 순환 후보입니다. 결정 문제의 효율적 후보 검증을 보여 주며 탐색 알고리즘이나 미해결 문제의 해답은 아닙니다.
직접 확인해 보기
후보 [0,1,2,0]이 실패했다면 모든 정점을 방문하는 순환이 없다고 결론내릴 수 있나요?

답과 이유 확인
아닙니다. 그 순서가 조건을 만족하지 않는 것만 알 수 있습니다. 다른 후보 [0,2,1,0] 등이 가능한지는 따로 확인해야 합니다.
함께 읽을 글
- 그래프 이론 기본 개념 — 정점과 간선, 경로를 나타내는 뜻부터 확인합니다.
- 평면 그래프·오일러·해밀턴 경로 — 모든 정점을 방문하는 조건과 간선을 방문하는 조건을 구분합니다.
참고 자료
- Clay Mathematics Institute — P vs NP — 후보 검증과 답 찾기의 관계, P 대 NP 문제가 미해결임을 확인합니다. 예제는 별도로 작성했습니다.
이 글이 도움이 되었나요?
이어서 공부하기
체크포인트: 예제의 상태 변화를 손으로 추적하고 아래 문제에 적용하세요. 값이 없는 경우와 원소 하나인 경우도 설명해 보세요. 작은 기준 풀이와 비교하고 경로 복원·역방향 취소·입력 크기에 따른 비용을 설명하세요.
현재 공개된 추천 경로의 끝입니다. 같은 주제의 문제를 해설 없이 다시 풀거나 다른 심화 주제를 선택하세요.
권장 순서는 학습 가이드와 같습니다. 다른 순서는 접힌 참고 목록에서 확인할 수 있습니다. 읽음 표시는 숙달이나 채점 결과가 아닙니다.
원래 과정 목록 순서 (선택)
읽음 기록
읽음 — / 전체 30개 · 필수 0개
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.