728x90
- 이진탐색 조건: 변경할(최적화할) 값 x에 대하여 f(x)가 단조 증가 혹은 단조 감소
- 단조 증가 함수 : x<=y 이면 f(x)<=f(y)인 경우
- 일반적으로 조건(constraint)은 f(x)에 대하여 정의된다.
1. 파라메트릭 서치(Parametric Search)란?
- 최적화 문제를 결정 문제(예 혹은 아니오) 로 바꾸어 해결하는 기법
- 일반적으로 코딩테스트에서 파라메트릭 서치 문제는 이진 탐색을 이용하여 해결할 수 있다.
https://www.acmicpc.net/problem/2512
2512번: 예산
첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상
www.acmicpc.net
let fs = require("fs");
let input = fs.readFileSync("index.txt").toString().split("\n");
let n = Number(input[0])// 지방의 수
let arr = input[1].split(" ").map(Number); // 각 지방의 예산 요청
let m= Number(input[2])//총 예산
let start=1 // 이진 탐색을 위한 시작점(start)과 끝점(end) 설정
let end = arr.reduce((a,b)=>Math.max(a,b));//가장 큰 수
let result = 0 ;
while(start<=end){
//이진탐색 수행(반복문)
let mid = parseInt((start+end)/2)
let total = 0 // 배정된 예산의 총액 계산
for(x of arr){
total=total+Math.min(x,mid)
}
if(total<=m){
result=mid;
start=mid+1
}else{
end=mid-1
}
}
console.log(result)
728x90
'알고리즘' 카테고리의 다른 글
투 포인터 알고리즘 (0) | 2023.05.07 |
---|---|
이진탐색 문제 풀이1 (0) | 2023.05.01 |
2. 정렬된 배열에서 특정 원소의 개수 구하기 (0) | 2023.04.30 |
1. 이진 탐색 알고리즘 이해하기 (0) | 2023.04.30 |
프로그래머스 > 코딩 테스트 연습 > 연속 부분 수열의 합 (0) | 2023.04.26 |