[JavaScript] ํ๋ก๊ทธ๋๋จธ์ค - ๊ธฐ์ง๊ตญ ์ค์น
[๋ฌธ์ ]
https://school.programmers.co.kr/learn/courses/30/lessons/12979#
[ํ์ด]
์ ํ๋ ฅ์ดw์ธ ๊ฒฝ์ฐ, ์ต๋ 2*w + 1 ๊ฑฐ๋ฆฌ๋งํผ ์ํํธ๋ค์๊ฒ ์ ํ๊ฐ ๋๋ฌ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ ํ๊ฐ ๋๋ฌํ์ง ์์ ์ฐ์๋ ์ํํธ์ ์ต์์ ๊ธฐ์ง๊ตญ์ผ๋ก ์ ํ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Math.ceil(์ฐ์๋ ์ํํธ ๊ธธ์ด/(2*w+1))
์์ 1๋ฒ๊ณผ ๊ฐ์ด w=1์ธ ๊ฒฝ์ฐ ์ ํ๊ฐ ๋๋ฌํ์ง ์์ ์ฐ์๋ ์ํํธ์ ๊ธธ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ Math.ceil(2/3) + Math.ceil(4/3) = 1 + 2 = 3์ด ์ ๋ต์ด ๋ฉ๋๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ๊ธฐ ์ํด ํ์ฌ ๊ธฐ์ค์ idx = 1๋ก ์ด๊ธฐํํ ํ, stations๋ฅผ ํ์ํ๋ฉฐ ์ํํธ์ ๊ธธ์ด๋ฅผ ๊ตฌํฉ๋๋ค.
- start = 3, end = 5 ์ด๋ฏ๋ก ๊ธธ์ด๋ start - idx = 2์ด๋ฉฐ, idx = end + 1 = 6์ผ๋ก ๊ฐฑ์
- start = 10, end = 11์ด๋ฏ๋ก ๊ธธ์ด๋ start - idx = 4์ด๋ฉฐ, idx = end + 1 = 12์ผ๋ก ๊ฐฑ์
๋ฐ๋ผ์ ์ ํ๊ฐ ์๋ ์ํํธ์ ๊ธธ์ด๋ 2์ 4์ธ๊ฒ์ ๊ตฌํ ์ ์์ต๋๋ค.
[์ฝ๋]
function solution(n, stations, w) {
var answer = 0;
let idx = 1;
stations.forEach((station) => {
let [start, end] = [station - w, station + w];
if(idx > n) {
return answer;
}
if(start > idx) {
answer += Math.ceil((start - idx)/(2*w+1));
}
idx = end+1;
})
if(idx <= n) {
answer += Math.ceil((n - idx + 1)/(2*w+1));
}
return answer;
}