백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 2531 , 회전 초밥
풀이 시간
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
슬라이딩 윈도우로 풀었는데 바로 풀렸음. 여기선 N의 최댓값이 30,000까지라 시간초과가 안발생했지만, 이 문제의 업그레이드 버전 15961번에서는 N이 3백만까지라 아마 거기선 시간초과가 나지 않을까 싶다.
우선, 이 문제를 푸는데는 슬라이딩 윈도우로 문제없이 풀림.
문제 출처
https://www.acmicpc.net/problem/2531
풀이
슬라이딩 윈도우로 0번 인덱스부터 마지막인덱스 까지 모두 확인해주었다.
k만큼의 칸을 분류한뒤 추가할 스시를 넣어준다.
이후 set을 사용하여 중복을 제거해주고 남은 길이를 체크해주면서
최종적으로 가장 긴 길이를 return 시켜주면된다.
정답
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n")
.map((v) => v.split(" ").map(Number));
const [N, d, k, c] = input.shift();
const sushi = input.map((v) => Number(v));
function solution(N, d, k, c, sushi) {
let [MAX, tmp] = [0, 0];
for (let i = 0; i < N; i++) {
if (i + k >= sushi.length) {
tmp = [...sushi.slice(i), ...sushi.slice(0, i + k - sushi.length), c];
} else tmp = [...sushi.slice(i, i + k), c];
let s_tmp = new Set(tmp);
let result = [...s_tmp];
if (result.length > MAX) MAX = result.length;
}
return MAX;
}
console.log(solution(N, d, k, c, sushi));
반응형
'알고리즘 공부 > 백준 - 자바스크립트' 카테고리의 다른 글
백준/ Silver 1 문제 , 백준 Node.js 자바스크립트 15565 , 귀여운 라이언 (0) | 2022.10.02 |
---|---|
백준/ Silver 2 문제 , 백준 Node.js 자바스크립트 14465 , 소가 길을 건너간 이유 5 (0) | 2022.10.01 |
백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 10025 , 게으른 백곰 (1) | 2022.09.29 |
백준/ Gold 5 문제 , 백준 Node.js 자바스크립트 2470 , 두 용액 [투포인터] (0) | 2022.09.27 |
백준/ Silver 3 문제 , 백준 Node.js 자바스크립트 2548 , 대표 자연수 [정렬] (1) | 2022.09.26 |