티스토리 뷰
*️⃣ 개념
- 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법
- 배열 내부의 데이터가 오름차순 또는 내림차순으로 정렬되어 있어야만 사용할 수 있는 알고리즘이다.
*️⃣ 탐색 과정
- 변수 3개(low, high, mid)를 사용하여 탐색한다.
- 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는 것이 이진 탐색의 과정이다.
*️⃣ 응용 문제 풀이
백준 1654 https://www.acmicpc.net/problem/1654
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
function solution(arr) {
const [K, N] = arr.shift().split(' ').map(Number);
const lan = arr.map(row => row).sort();
// 이진 탐색 초기 설정: 랜선 길이의 최소값과 최대값
let low = 1;
let high = Math.max(...lan);
let answer = 0;
while (low <= high) {
const mid = Math.floor((low + high) / 2);
let cnt = 0;
for (let i = 0; i < K; i++) {
cnt += Math.floor(lan[i] / mid);
}
if (cnt >= N) { // 자른 랜선 개수가 N 이상이면, 더 긴 길이 시도
answer = mid;
low = mid + 1;
} else { // 자른 랜선 개수가 N보다 작다면 길이를 줄임
high = mid - 1;
}
}
return answer;
}
console.log(solution(input));
'Programming > 알고리즘' 카테고리의 다른 글
그리디 알고리즘 / Greedy Algorithm / 탐욕법 (0) | 2024.11.11 |
---|---|
외판원 순회 - DP와 비트마스킹 (백준 2098, node.js) (2) | 2024.11.08 |
동적계획법(DP, Dynamic Programming) (1) | 2024.11.07 |
비트마스킹(BitMask) (1) | 2024.11.06 |
트리(Tree) 구조와 트리 순회 (0) | 2024.11.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 네트워크
- web
- React Query
- Tanstack-Query
- git
- sass
- 캡스톤디자인
- 핀터레스트
- react
- 디바운싱
- Tanstack Query
- react-query
- Masonry 레이아웃
- 무한스크롤
- 패키지 매니저
- prettier
- Network
- 티스토리챌린지
- 오블완
- 알고리즘
- 최적화
- Next.js
- 쓰로틀링
- style-lint
- eslint
- Firebase
- zustand
- 이브와ICT멘토링
- AI Challeng for Biodiversity
- github
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함