๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/12979#

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ธฐ์ง€๊ตญ ์„ค์น˜

N๊ฐœ์˜ ์•„ํŒŒํŠธ๊ฐ€ ์ผ๋ ฌ๋กœ ์ญ‰ ๋Š˜์–ด์„œ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘์—์„œ ์ผ๋ถ€ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์—๋Š” 4g ๊ธฐ์ง€๊ตญ์ด ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ด ๋ฐœ์ „ํ•ด 5g ์ˆ˜์š”๊ฐ€ ๋†’์•„์ ธ 4g ๊ธฐ์ง€๊ตญ์„ 5g ๊ธฐ์ง€๊ตญ์œผ๋กœ ๋ฐ”๊พธ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ 5

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

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๋ฒˆ์งธ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•  ๊ฒฝ์šฐ, ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 3๊ฐœ์˜ ์•„ํŒŒํŠธ๋ณด๋‹ค ๋” ๋งŽ์€ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•  ๊ฒฝ์šฐ์—๋„ ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ, ์šฐ๋ฆฌ๋Š” ๊ธฐ์ง€๊ตญ์„ ์ตœ์†Œ๋กœ ์„ค์น˜ํ•˜๋ฉด์„œ ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„  ์ตœ์†Œ 3๊ฐœ์˜ ์•„ํŒŒํŠธ ์˜ฅ์ƒ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•ด์•ผ ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„ํŒŒํŠธ์˜ ๊ฐœ์ˆ˜ N, ํ˜„์žฌ ๊ธฐ์ง€๊ตญ์ด ์„ค์น˜๋œ ์•„ํŒŒํŠธ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด 1์ฐจ์› ๋ฐฐ์—ด stations, ์ „ํŒŒ์˜ ๋„๋‹ฌ ๊ฑฐ๋ฆฌ W๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์•„ํŒŒํŠธ์— ์ „ํŒŒ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ฆ์„คํ•ด์•ผ ํ•  ๊ธฐ์ง€๊ตญ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”

์ œํ•œ์‚ฌํ•ญ

  • N: 200,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • stations์˜ ํฌ๊ธฐ: 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜
  • stations๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ณ , ๋ฐฐ์—ด์— ๋‹ด๊ธด ์ˆ˜๋Š” N๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • W: 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜

ํ’€์ด

์ œํ•œ ์‚ฌํ•ญ์„ ๋ณด๋ฉด ์ด ๋ฌธ์ œ๋Š” O(N)์œผ๋กœ๋„ ํ’€๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์กฐ๊ฑด O(1)์ด๋‚˜ O(nlogn)์œผ๋กœ ํ’€์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋„ˆ๋ฌด ์ „ํ˜•์ ์ธ ์ด๋ถ„ํƒ์ƒ‰ ์Šคํƒ€์ผ์˜ ๋ฌธ์ œ์ด๊ธธ๋ž˜, ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ํ’€์ด๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ๋ฏธ๋ฆฌ ์„ค์น˜๋˜์–ด์žˆ๋Š” ๊ธฐ์ง€๊ตญ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•ด๋ณด๋Š” ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์ด ์š”๊ตฌ๋˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋ž˜์„œ ๋™๋™๋Œ€๋‹ค๊ฐ€ ์งˆ๋ฌธํ•˜๊ธฐ ํƒญ์„ ํ†ตํ•ด ํžŒํŠธ๋ฅผ ์–ป์–ด ๊ทธ๋ฆฌ๋””ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 

 

๊ธฐ์ง€๊ตญ์˜ ์ „ํŒŒ๊ฑฐ๋ฆฌ w๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ ์œ„์น˜์— ์žˆ๋Š” ๊ธฐ์ง€๊ตญ์ด ์ „ํŒŒ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฒ”์œ„๊ฐ€ 2 * w + 1 ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ตœ์†Œํ•œ ์ ์€ ๊ฐœ์ˆ˜์˜ ๊ธฐ์ง€๊ตญ์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 2 * w + 1 ๋งŒํผ์˜ ๋ฒ”์œ„๋ฅผ ๋‘๊ณ  ๊ธฐ์ง€๊ตญ์ด ์„ค์น˜๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

๋”ฐ๋ผ์„œ ํ˜„์žฌ ์ฃผ์–ด์ง„ ๊ธฐ์ง€๊ตญ์˜ ์œ„์น˜๋ฅผ ํ†ตํ•ด ์ „ํŒŒ๊ฐ€ ๋‹ฟ์ง€ ์•Š๋Š” ์•„ํŒŒํŠธ ๊ตฌ๊ฐ„์„ ์„ ๋ณ„ํ•˜๊ณ  ํ•ด๋‹น ๊ตฌ๊ฐ„ ์•ˆ์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๊ธฐ์ง€๊ตญ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์ฃผ๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘์œ„์น˜๋ฅผ ์ฒซ๋ฒˆ์งธ ์•„ํŒŒํŠธ๋กœ ์žก๊ณ  ์ด๋ฏธ ์„ค์น˜๋œ ๊ธฐ์ง€๊ตญ์„ ํ•˜๋‚˜์”ฉ ์ฒดํฌํ•˜๋ฉด์„œ ๊ตฌ๊ฐ„์„ ์„ค์ •ํ•˜๊ณ , ๋งŒ์•ฝ ๋งˆ์ง€๋ง‰ ๊ธฐ์ง€๊ตญ์˜ ๋ฒ”์œ„๊ฐ€ ๋งˆ์ง€๋ง‰ ์•„ํŒŒํŠธ๊นŒ์ง€ ๋‹ฟ์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰ ๊ธฐ์ง€๊ตญ์˜ ๋ฒ”์œ„์—์„œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์•„ํŒŒํŠธ๊นŒ์ง€์˜ ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ ๊ณ„์‚ฐ๊นŒ์ง€ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ