백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 15565 , 귀여운 라이언
풀이 시간
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
처음에 전체 배열에서 left, right를 늘려나아가는 식으로 했는데 그럴 필요 없이 라이언이 담긴 위치들만 가지고 슬라이딩 윈도우를 해나아가면되었다. 처음 한방법은 라이언을 만날때까지 계속 늘려나아가야해서 예외상황이 많았는데, 이런식으로하면 적은 조건으로 쉽게 풀 수 있다.
문제 출처
https://www.acmicpc.net/problem/15565
풀이
우선 라이언이 있는 위치의 인덱스를 모두 lion 에 저장해둔다.
이때, lion 배열의 길이가 K보다 작다면 이는 문제 해결을 할 수 없으므로 바로 return -1을 해버리고 종료시킨다.
최솟값을 찾는 문제이기 때문에 result를 무한대로 잡아준다.
이후, while문을 돌아가면서 양쪽끝의 라이언들을 이동시켜주고 그 차이 값이 곧, 현재 라이언들이 K개로 묶여져있는 길이이기때문에 이 값을 result와 비교해주면서 최솟값을 갱신해준다.
right값이 lion 배열과 같아지는 순간은 이제 끝에 다다른 경우이므로 탐색을 종료시킨다.
정답
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n")
.map((v) => v.split(" ").map(Number));
const [N, K] = input.shift();
const dolls = input[0];
function solution(N, K, dolls) {
const lion = [];
dolls.map((v, idx) => (v === 1 ? lion.push(idx) : ""));
// 초기 라이언 인형 숫자가 K보다 적을 시 바로 종료.
if (lion.length < K) return -1;
let result = Infinity;
let [left, right, cnt] = [0, K - 1, 0];
while (true) {
cnt = lion[right] - lion[left] + 1;
result = Math.min(result, cnt);
[left, right] = [left + 1, right + 1];
if (right === lion.length) break;
}
return result;
}
console.log(solution(N, K, dolls));
반응형
'알고리즘 공부 > 백준 - 자바스크립트' 카테고리의 다른 글
백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 21921 , 블로그 [슬라이딩 윈도우] (0) | 2022.10.04 |
---|---|
백준/ Silver 2 문제 , 백준 Node.js 자바스크립트 12891 , DNA 비밀번호 [슬라이딩 윈도우] (0) | 2022.10.03 |
백준/ Silver 2 문제 , 백준 Node.js 자바스크립트 14465 , 소가 길을 건너간 이유 5 (0) | 2022.10.01 |
백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 2531 , 회전 초밥 (0) | 2022.09.30 |
백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 10025 , 게으른 백곰 (1) | 2022.09.29 |