[Algorithm] ๊ธฐ์ง๊ตญ์ค์น
๐ ๋ฌธ์
N๊ฐ์ ์ํํธ๊ฐ ์ผ๋ ฌ๋ก ์ญ ๋์ด์ ์์ต๋๋ค. ์ด ์ค์์ ์ผ๋ถ ์ํํธ ์ฅ์์๋ 4g ๊ธฐ์ง๊ตญ์ด ์ค์น๋์ด ์์ต๋๋ค. ๊ธฐ์ ์ด ๋ฐ์ ํด 5g ์์๊ฐ ๋์์ ธ 4g ๊ธฐ์ง๊ตญ์ 5g ๊ธฐ์ง๊ตญ์ผ๋ก ๋ฐ๊พธ๋ ค ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ 5g ๊ธฐ์ง๊ตญ์ 4g ๊ธฐ์ง๊ตญ๋ณด๋ค ์ ๋ฌ ๋ฒ์๊ฐ ์ข์, 4g ๊ธฐ์ง๊ตญ์ 5g ๊ธฐ์ง๊ตญ์ผ๋ก ๋ฐ๊พธ๋ฉด ์ด๋ค ์ํํธ์๋ ์ ํ๊ฐ ๋๋ฌํ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด 11๊ฐ์ ์ํํธ๊ฐ ์ญ ๋์ด์ ์๊ณ , [4, 11] ๋ฒ์งธ ์ํํธ ์ฅ์์๋ 4g ๊ธฐ์ง๊ตญ์ด ์ค์น๋์ด ์์ต๋๋ค. ๋ง์ฝ ์ด 4g ๊ธฐ์ง๊ตญ์ด ์ ํ ๋๋ฌ ๊ฑฐ๋ฆฌ๊ฐ 1์ธ 5g ๊ธฐ์ง๊ตญ์ผ๋ก ๋ฐ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. (์ ํ์ ๋๋ฌ ๊ฑฐ๋ฆฌ๊ฐ W์ผ ๋, ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํ๋ฅผ ์์ชฝ์ผ๋ก W๋งํผ ์ ๋ฌํ ์ ์์ต๋๋ค.)
- ์ด๊ธฐ์, 1, 2, 6, 7, 8, 9๋ฒ์งธ ์ํํธ์๋ ์ ํ๊ฐ ์ ๋ฌ๋์ง ์์ต๋๋ค.

- 1, 7, 9๋ฒ์งธ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํ ๊ฒฝ์ฐ, ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.

- ๋ ๋ง์ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํ๋ฉด ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.

์ด๋, ์ฐ๋ฆฌ๋ 5g ๊ธฐ์ง๊ตญ์ ์ต์๋ก ์ค์นํ๋ฉด์ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ๋ ค๊ณ ํฉ๋๋ค. ์์ ์์์์ ์ต์ 3๊ฐ์ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํด์ผ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
์ํํธ์ ๊ฐ์ N, ํ์ฌ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ์ ๋ฒํธ๊ฐ ๋ด๊ธด 1์ฐจ์ ๋ฐฐ์ด stations, ์ ํ์ ๋๋ฌ ๊ฑฐ๋ฆฌ W๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์ฆ์คํด์ผ ํ ๊ธฐ์ง๊ตญ ๊ฐ์์ ์ต์๊ฐ์ ๋ฆฌํดํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์
์ ํ์ฌํญ
- N: 200,000,000 ์ดํ์ ์์ฐ์
- stations์ ํฌ๊ธฐ: 10,000 ์ดํ์ ์์ฐ์
- stations๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๊ณ , ๋ฐฐ์ด์ ๋ด๊ธด ์๋ N๋ณด๋ค ๊ฐ๊ฑฐ๋ ์์ ์์ฐ์์ ๋๋ค.
- W: 10,000 ์ดํ์ ์์ฐ์
์ ์ถ๋ ฅ ์
11 | [4, 11] | 1 | 3 |
16 | [9] | 2 | 3 |
โ๏ธ ํ์ด
N ์ ํ(์ํํธ์ ๊ฐ์)๊ฐ ๋๋ฌด ํฌ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์ํํธ๋ฅผ ์ํํ๋ ๊ฒ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋๋ ์ ๋ฐฐ์ด์ ๋ค๋ค์ผํ ๊ฒ์ผ๋ก ์๊ฐํ๊ณ ๊ทธ๋ฆผ์ ๋ณด๊ณ ์๊ฐํ ๋ฐฉ๋ฒ์ด ์ฃผ์ด์ง ๊ธฐ์ง๊ตญ ์ฌ์ด๋ฅผ ๊ณ์ฐํด์ ๋ต์ ๋ด๋ ๋ฐฉ๋ฒ์ด ๊ด์ฐฎ์ ๊ฒ์ผ๋ก ๋๊ปด์ก๋ค.
stations ๋ฐฐ์ด์ ์ํํ๊ธฐ ์์ ์ ์ผ ์์ ์ ํ๊ฐ ๋ฟ์ง ์๋ ๊ณณ์ ๊ณ์ฐํ๊ธฐ ์ํด์๋ ๊ธฐ์ค์ ์ด ์์ด์ผํ๋ค. ๊ทธ๋์ 1๋ฒ์งธ ์ํํธ ์ด์ ๊น์ง ์ ํ๋ฅผ ๋ณด๋ผ ๊ธฐ์ง๊ตญ์ ๋ฃ์ด์คฌ๋ค. w๋งํผ์ ์ ํ๊ฑฐ๋ฆฌ๋ฅผ ํฌํจํ๊ณ ๊ธฐ์ง๊ตญ์ ์๊ธฐ ์์ ์ ์์น๋ฅผ ํฌํจํ์ฌ -w๋ฅผ ๋ฐฐ์ด์ ๋งจ ์์ ๋ฃ์ด์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ผ ๋ง์ง๋ง ๋ถ๋ถ๋ ๋์ผํ๊ฒ ๊ธฐ์ค์ด ๋๋ ๊ธฐ์ง๊ตญ์ผ๋ก ์ํํธ์ ๊ฐ์(n) + ์ ํ์ ๊ฑฐ๋ฆฌ(w) + ๊ธฐ์ง๊ตญ ์์ ์ ์์น(1)์ stations ๋ฐฐ์ด ์ ์ผ ๋์ ๋ฃ์ด์คฌ๋ค.
์ดํ for๋ฌธ์ ๋๋ ค์ ์ด์ ๊ธฐ์ง๊ตญ์ ์์น์ ๋ค์ ๊ธฐ์ง๊ตญ ์ฌ์ด์ ์ ํ๊ฐ ๋ฟ์ง ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ๋ค์ ๊ธฐ์ง๊ตญ - ์ด์ ๊ธฐ์ง๊ตญ - (2 * ์ ํ + 1)์ ์์ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ๋ค. ๋ง์ฝ ๊ณ์ฐ๊ฐ์ด 1๋ณด๋ค ์๋ค๋ฉด ์ ํ๊ฐ ๋ฟ์ง ์๋ ๊ณต๊ฐ์ด ์๋ค๊ณ ํ๋จํ์ฌ continue ์์ผ์ฃผ๊ณ , ๊ทธ๊ฒ ์๋๋ผ๋ฉด ํ๋์ ๊ธฐ์ง๊ตญ์ ์ค์นํ์ ๋ ์ ํ๋๋ ๊ณต๊ฐ(2 * ์ ํ๊ฑฐ๋ฆฌ(w) + ์์ ์ ์์น(1))์ผ๋ก ๋๋ ์ฌ๋ฆผํด์ค ํ์ answer์ ๋ํด์คฌ๋ค.
โจ๏ธ ์ฝ๋
function solution(n, stations, w) {
var answer = 0;
stations.unshift(-w);
stations.push(n + w + 1);
for (let i = 0; i < stations.length - 1; i++) {
prevStation = stations[i];
nextStation = stations[i + 1];
const checkRange = nextStation - prevStation - (2 * w + 1);
if (checkRange < 1) continue;
else answer += Math.ceil(checkRange / (2 * w + 1));
}
return answer;
}