Skip to content
Algorithm.js
Frame

Binary Search 이용한 최대값/최소값 풀이

배열이나 답 범위를 절반씩 좁혀가며 탐색하는 기본 이진 탐색 패턴과 최대·최소 해를 찾는 응용 전략

Oct 16, 2025 — general-binary-search

최대값 찾기

[MINIMUM_POSSIBLE_ANSWER, MAXMIMUM_POSSIBLE_ANSWER]
|
|
v
[left mid right]
조건 만족 : 더 큰 range 를 찾아야 함.
[mid + 1, ... , right]
조건 만족하지 않 : 더 작은 range 를 찾아야 함.
[left, ..., mid-1]
[MINIMUM_POSSIBLE_ANSWER, MAXMIMUM_POSSIBLE_ANSWER]
이번 탐색까지는 만족함.
[left, right]
|
mid
mid + 1
[right, left]
while 탐색 조건에 맞지 않아 종료
const fn = arr => {
const isOK = (value) => {
// this function is implemented depending on the problem
return BOOLEAN;
}
let left = MINIMUM_POSSIBLE_ANSWER;
let right = MAXMIMUM_POSSIBLE_ANSWER;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
// 이번 range 가 조건을 만족하므로 더 큰 range 를 찾아야 함.
if (isOK(mid)) {
left = mid + 1;
// 이번 range 가 조건을 만족하지 않으므로 더 작은 range 를 찾아야 함.
} else {
right = mid - 1;
}
}
return right;
}

최소값 찾기

[MINIMUM_POSSIBLE_ANSWER, MAXMIMUM_POSSIBLE_ANSWER]
|
|
v
[left mid right]
[MINIMUM_POSSIBLE_ANSWER, MAXMIMUM_POSSIBLE_ANSWER]
이번 탐색까지는 만족함.
[left, right]
|
mid
mid-1
[right,left]
while 탐색 조건에 맞지 않아 종료
const fn = arr => {
const isOK = (value) => {
// this function is implemented depending on the problem
return BOOLEAN;
}
let left = MINIMUM_POSSIBLE_ANSWER;
let right = MAXMIMUM_POSSIBLE_ANSWER;
while (left <= right) {
let mid = Math.floor((left + right) / 2);
// 이번 range 가 조건을 만족하므로 더 작은 range 를 찾아야 함.
if (isOK(mid)) {
right = mid - 1;
// 이번 range 가 조건을 만족하지 않으므로 더 큰 range 를 찾아야 함.
} else {
left = mid + 1;
}
}
return left;
}

기본 문제들

응용 문제들

Reference