Algorithm

[Algorithm] ๊ธฐ์ง€๊ตญ์„ค์น˜

ghkdu2 2023. 2. 22. 19:42

๐Ÿ“‹ ๋ฌธ์ œ

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;
}