Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ISR
- 자바스크립트로 코딩테스트
- next.js msw
- 테오의스프린트
- 알고리즘
- 알고리즘JS
- js
- ssg
- Queue
- 자바스크립트 동향
- TC39
- 스토리북
- MinHeap
- Next.js
- 카카오엔터프라이즈 인턴
- 프론트엔드 아키텍처
- react cypress
- ₩1
- react-table
- storybook 커스텀
- msw
- storybook styled-components
- fsd
- storybook
- 리액트 파이버
- createPortal
- 이펙티브 타입스크립트
- 테스트코드 자동화
- 2023 자바스크립트
- 말줄임 툴팁 만들기
Archives
- Today
- Total
MEI
[JS] 징검다리 건너기 본문
- 난이도 LV.2
문제 풀이
프로그래머스 입국 심사와 함께 풀면 좋을 것 같다 :)
'인원'을 이분 탐색하여 풀었다.
1. 인원을 이분 탐색한다.
- left : 0
- right : 200000000 ( Math.max(...stones) 를 할 수도 있지만 ! 런타임 에러가 난다 😅)
2. 해당 mid 값이 가능한지 검사한다.
검사하는 방법은 간단하다. 해당 mid의 값보다 적은 stone 값을 계산하여,
그 stone들이 연속적으로 k번 반복되는지 확인한다.
k번 반복되면, 그 인원으로 건너기 불가능한 것이고
k번이 반복되는 경우가 없으면, 그 인원으로 건너기가 가능한 것이다.
const available = (people, stones, max) => {
let count = 0;
for (let stone of stones) {
if (stone < people) {
count++;
if (count >= max) return false;
} else count = 0;
}
return true;
};
위에 로직만 찾는다면 쉽게 풀 수 있는 문제였다.. 😅 하지만 이걸 찾는게 어려웠다.
코드
const available = (people, stones, max) => {
let count = 0;
for (let stone of stones) {
if (stone < people) {
count++;
if (count >= max) return false;
} else count = 0;
}
return true;
};
function solution(stones, k) {
var answer = 0;
let left = 0;
let right = 200000000;
while (left < right) {
const mid = Math.floor((left + right) / 2);
const result = available(mid, stones, k);
if (result) {
left = mid + 1;
answer = mid;
} else {
right = mid;
}
}
return answer;
}
'STUDY > Algorithms' 카테고리의 다른 글
[JS] 순위 검색 (0) | 2023.04.20 |
---|---|
[JS] 교점에 별 만들기 (0) | 2023.04.07 |
JS로 알고리즘하기 (0) | 2023.03.03 |
[JS | 알고리즘] BFS 와 0-1 BFS (0) | 2023.02.05 |