읽기 전에 알아두면 좋아요
아래 개념이 익숙하면 본문을 바로 읽으세요. 낯선 개념만 링크에서 복습하면 됩니다.
- JavaScript 배열: 인덱스 조회와 삽입·삭제 비용배열은 여러 값을 순서대로 담습니다. 인덱스로 값을 읽고 반복문으로 하나씩 살펴봅니다.
개념과 예제는 실행하지 않아도 읽을 수 있습니다. 내 컴퓨터·터미널에서 직접 실행하는 과정은 선택 실습입니다.
과정 위치와 선택 복습 안내
과정 위치: 완전탐색과 격자 · 알고리즘 개념
과정 위치는 이 글이 속한 묶음입니다. 이 단계의 모든 개념을 먼저 읽을 필요는 없습니다. 위에 연결한 개념 중 낯선 내용만 복습하세요. 문제의 조건·상태·갱신 순서는 익숙한 언어로 설명하면 됩니다.
JavaScript로 문법·실행 복습하기 (선택)
개념 글의 코드는 JavaScript 예시입니다. 문제 화면에서는 JavaScript·Python·Java·C++·C# 중 익숙한 언어의 함수를 작성하세요. 본문의 Node.js 입출력 예시는 로컬 실행을 위한 별도 안내입니다.
완전탐색에서 두 위치의 쌍 열거와 공동 순위 계산은 무엇이 다른가요?
완전탐색은 가능한 후보를 빠짐없이 확인하는 방법입니다. 두 개를 고르는 문제와 각 사람을 전체와 비교하는 문제는 반복 범위가 다릅니다.

[2,5,3,5]에서 합이 7인 인덱스 쌍은 (0,1)과 (0,3)입니다. 값이 같은 두 5도 서로 다른 위치입니다.
적용 조건·범위: 두 예제 모두 O(N²) 시간입니다. N=9의 쌍은 36개지만 N=100,000의 쌍은 4,999,950,000개입니다. 입력 제한과 후보당 계산량을 함께 보세요. 작은 입력에서는 단순한 완전탐색을 기준 답으로 삼아 더 빠른 풀이와 비교하기도 좋습니다.

이 글에서 할 일: 쌍 열거와 공동 순위 계산에 맞는 반복 범위를 선택합니다. 선수 지식: 배열 인덱스·중첩 반복문.
순서 없는 쌍은 i보다 큰 j만 고릅니다
아래 JavaScript 예제는 서로 다른 두 위치를 골라 합이 목표값인 쌍을 찾습니다. 코드 아래의 결과를 보면서 같은 쌍을 두 번 세지 않는 반복 범위를 살펴보세요. 직접 실행하지 않아도 설명을 따라갈 수 있습니다.

function pairIndices(values, target) {
const result = [];
for (let i = 0; i < values.length; i++) {
for (let j = i + 1; j < values.length; j++) {
if (values[i] + values[j] === target) result.push([i, j]);
}
}
return result;
}
console.log(JSON.stringify(pairIndices([2, 5, 3, 5], 7)));
실행 결과
[[0,1],[0,3]]
j = i + 1이면 자기 자신과 비교하지 않고, (i,j)와 (j,i)를 중복으로 세지 않습니다. 서로 다른 두 인덱스는 작은 인덱스를 i로 정하는 방법이 하나뿐이므로 모든 쌍을 정확히 한 번 방문합니다.
원소 N개에서 후보 수는 (N-1)+(N-2)+…+1 = N(N-1)/2입니다. 두 명을 제외하는 문제라면 전체 합에서 values[i]+values[j]를 빼고 조건을 확인할 수 있습니다. 찾은 뒤 나머지를 원래 순서대로 출력해야 한다면 입력을 임의로 정렬하지 않습니다.
내 컴퓨터에서 직접 실행하기 — 중복 없는 쌍 찾기 예제 (선택)
코드를 직접 바꿔보고 싶은 분을 위한 안내입니다. 이 과정은 방문자 자신의 컴퓨터에서 진행하며, 글을 읽기 위해 반드시 실행할 필요는 없습니다.
준비물: Node.js와 코드 편집기인 Visual Studio Code(VS Code). Node.js는 JavaScript 파일을 컴퓨터에서 실행하는 프로그램입니다. 아직 설치하지 않았다면 두 프로그램의 공식 사이트에서 설치한 뒤 진행하세요.
- 컴퓨터에 연습용 폴더를 하나 만들고, VS Code에서 파일 → 폴더 열기로 그 폴더를 엽니다.
- 그 폴더 안에
pairs.js파일을 만듭니다. 위의 JavaScript 예제 전체를 복사해 붙여넣고 저장하세요. 마지막console.log줄도 포함하며, 파일 이름 끝이.js.txt가 되지 않도록 확인합니다. - VS Code의 터미널 → 새 터미널을 선택합니다. 아래쪽에 열린 터미널은 명령어를 입력하는 창입니다. 다음 명령으로 Node.js 설치 여부를 확인합니다.
node --version
v로 시작하는 버전 번호가 나오면 실행할 수 있습니다. 명령을 찾을 수 없다는 메시지가 나오면 Node.js를 설치하고 VS Code를 완전히 닫았다가 다시 여세요.
터미널의 현재 위치가 방금 파일을 저장한 폴더인지 확인한 뒤, 다음 명령을 입력하고 Enter를 누릅니다. 이 명령은 JavaScript 파일 안이 아니라 터미널에 입력합니다.
node pairs.js
터미널에 나온 값을 위의 실행 결과와 비교하세요. Cannot find module이 나오면 파일 이름과 저장 여부, 터미널에서 연 폴더가 같은지 확인합니다.
등수는 자신보다 큰 점수의 수에 1을 더합니다
아래 JavaScript 예제는 각 점수보다 큰 점수가 몇 개인지 세어 등수를 구합니다. 코드 아래의 결과와 표를 보면서 동점인 점수에 같은 순위가 매겨지는 이유를 살펴보세요. 직접 실행하지 않아도 설명을 따라갈 수 있습니다.

function ranks(scores) {
const result = [];
for (let i = 0; i < scores.length; i++) {
let rank = 1;
for (let j = 0; j < scores.length; j++) {
if (scores[j] > scores[i]) rank++;
}
result.push(rank);
}
return result;
}
console.log(JSON.stringify(ranks([80, 90, 90, 70])));
실행 결과
[3,1,1,4]
| 점수 | 더 큰 점수 수 | 등수 |
|---|---|---|
| 80 | 2 | 3 |
| 90 | 0 | 1 |
| 90 | 0 | 1 |
| 70 | 3 | 4 |
각 i의 등수를 구할 때는 j를 처음부터 끝까지 확인합니다. 이때 비교는 >입니다. 자신과 동점인 점수는 증가 조건을 통과하지 않습니다. >=로 바꾸면 자신과 동점자까지 더해져 결과가 달라집니다. 이 규칙은 1,1,3처럼 공동 순위 뒤의 등수를 건너뜁니다.
내 컴퓨터에서 직접 실행하기 — 공동 순위 계산 예제 (선택)
코드를 직접 바꿔보고 싶은 분을 위한 안내입니다. 이 과정은 방문자 자신의 컴퓨터에서 진행하며, 글을 읽기 위해 반드시 실행할 필요는 없습니다.
준비물: Node.js와 코드 편집기인 Visual Studio Code(VS Code). Node.js는 JavaScript 파일을 컴퓨터에서 실행하는 프로그램입니다. 아직 설치하지 않았다면 두 프로그램의 공식 사이트에서 설치한 뒤 진행하세요.
- 컴퓨터에 연습용 폴더를 하나 만들고, VS Code에서 파일 → 폴더 열기로 그 폴더를 엽니다.
- 그 폴더 안에
ranks.js파일을 만듭니다. 위의 JavaScript 예제 전체를 복사해 붙여넣고 저장하세요. 마지막console.log줄도 포함하며, 파일 이름 끝이.js.txt가 되지 않도록 확인합니다. - VS Code의 터미널 → 새 터미널을 선택합니다. 아래쪽에 열린 터미널은 명령어를 입력하는 창입니다. 다음 명령으로 Node.js 설치 여부를 확인합니다.
node --version
v로 시작하는 버전 번호가 나오면 실행할 수 있습니다. 명령을 찾을 수 없다는 메시지가 나오면 Node.js를 설치하고 VS Code를 완전히 닫았다가 다시 여세요.
터미널의 현재 위치가 방금 파일을 저장한 폴더인지 확인한 뒤, 다음 명령을 입력하고 Enter를 누릅니다. 이 명령은 JavaScript 파일 안이 아니라 터미널에 입력합니다.
node ranks.js
터미널에 나온 값을 위의 실행 결과와 비교하세요. Cannot find module이 나오면 파일 이름과 저장 여부, 터미널에서 연 폴더가 같은지 확인합니다.
후보 수로 실행량을 판단합니다
두 예제 모두 O(N²) 시간입니다. N=9의 쌍은 36개지만 N=100,000의 쌍은 4,999,950,000개입니다. 입력 제한과 후보당 계산량을 함께 보세요. 작은 입력에서는 단순한 완전탐색을 기준 답으로 삼아 더 빠른 풀이와 비교하기도 좋습니다.

순위 결과 배열은 O(N) 공간, 쌍 결과는 정답 쌍이 P개이면 O(P) 공간입니다. 빈 입력은 빈 결과를 반환하고, 한 점수의 등수는 1입니다. 같은 숫자라도 인덱스가 다르면 별도 후보라는 점을 유지하세요.
직접 확인하고 문제에 적용하기
[5,5,5]의 등수와 합이 10인 쌍의 수는 각각 얼마일까요?

답과 이유 확인
등수는 [1,1,1], 쌍의 수는 3입니다. 공동 순위는 같은 값끼리 증가하지 않지만, 쌍 열거에서는 서로 다른 세 인덱스 쌍을 각각 셉니다.
참고 자료
자료 확인일: 2026년 10월 19일.
- Competitive Programmer’s Handbook — Antti Laaksonen — 5장의 완전탐색과 22장의 조합 수.
이 글이 도움이 되었나요?
이어서 공부하기
체크포인트: 예제의 상태 변화를 손으로 추적하고 아래 문제에 적용하세요. 값이 없는 경우와 원소 하나인 경우도 설명해 보세요. 같은 쌍을 두 번 세지 않는 이유와 모서리·대각선의 좌표를 설명하세요.
이 개념으로 더 풀어보기
다음 추천 · 이 개념으로 풀 문제: 일곱 난쟁이 풀이: 두 명을 제외하는 완전탐색
권장 순서는 학습 가이드와 같습니다. 다른 순서는 접힌 참고 목록에서 확인할 수 있습니다. 읽음 표시는 숙달이나 채점 결과가 아닙니다.
원래 과정 목록 순서 (선택)
읽음 기록
읽음 — / 전체 30개 · 필수 0개
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.