Algorithm

[Algorithm] ๋“ฑ์‚ฐ์ฝ”์Šค ์ •ํ•˜๊ธฐ

ghkdu2 2023. 4. 6. 13:32

๐Ÿ“‹ ๋ฌธ์ œ

XX์‚ฐ์€ n๊ฐœ์˜ ์ง€์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ง€์ ์€ 1๋ถ€ํ„ฐ n๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋ฉฐ, ์ถœ์ž…๊ตฌ, ์‰ผํ„ฐ, ํ˜น์€ ์‚ฐ๋ด‰์šฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ฐ ์ง€์ ์€ ์–‘๋ฐฉํ–ฅ ํ†ตํ–‰์ด ๊ฐ€๋Šฅํ•œ ๋“ฑ์‚ฐ๋กœ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ์ง€์ ์„ ์ด๋™ํ•  ๋•Œ ์ด ๋“ฑ์‚ฐ๋กœ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋“ฑ์‚ฐ๋กœ๋ณ„๋กœ ์ด๋™ํ•˜๋Š”๋ฐ ์ผ์ • ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

๋“ฑ์‚ฐ์ฝ”์Šค๋Š” ๋ฐฉ๋ฌธํ•  ์ง€์  ๋ฒˆํ˜ธ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด 1-2-3-2-1 ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋“ฑ์‚ฐ์ฝ”์Šค๋Š” 1๋ฒˆ์ง€์ ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ 2๋ฒˆ, 3๋ฒˆ, 2๋ฒˆ, 1๋ฒˆ ์ง€์ ์„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
๋“ฑ์‚ฐ์ฝ”์Šค๋ฅผ ๋”ฐ๋ผ ์ด๋™ํ•˜๋Š” ์ค‘ ์‰ผํ„ฐ ํ˜น์€ ์‚ฐ๋ด‰์šฐ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ๋งˆ๋‹ค ํœด์‹์„ ์ทจํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํœด์‹ ์—†์ด ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ์‹œ๊ฐ„ ์ค‘ ๊ฐ€์žฅ ๊ธด ์‹œ๊ฐ„์„ ํ•ด๋‹น ๋“ฑ์‚ฐ์ฝ”์Šค์˜ intensity๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ XX์‚ฐ์˜ ์ถœ์ž…๊ตฌ ์ค‘ ํ•œ ๊ณณ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ์‚ฐ๋ด‰์šฐ๋ฆฌ ์ค‘ ํ•œ ๊ณณ๋งŒ ๋ฐฉ๋ฌธํ•œ ๋’ค ๋‹ค์‹œ ์›๋ž˜์˜ ์ถœ์ž…๊ตฌ๋กœ ๋Œ์•„์˜ค๋Š” ๋“ฑ์‚ฐ์ฝ”์Šค๋ฅผ ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ๋“ฑ์‚ฐ์ฝ”์Šค์—์„œ ์ถœ์ž…๊ตฌ๋Š” ์ฒ˜์Œ๊ณผ ๋์— ํ•œ ๋ฒˆ์”ฉ, ์‚ฐ๋ด‰์šฐ๋ฆฌ๋Š” ํ•œ ๋ฒˆ๋งŒ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋‹น์‹ ์€ ์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ์ง€ํ‚ค๋ฉด์„œ intensity๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ๋“ฑ์‚ฐ์ฝ”์Šค๋ฅผ ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ XX์‚ฐ์˜ ์ง€์ ๊ณผ ๋“ฑ์‚ฐ๋กœ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

  • ์œ„ ๊ทธ๋ฆผ์—์„œ ์›์— ์ ํžŒ ์ˆซ์ž๋Š” ์ง€์ ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, 1, 3๋ฒˆ ์ง€์ ์— ์ถœ์ž…๊ตฌ, 5๋ฒˆ ์ง€์ ์— ์‚ฐ๋ด‰์šฐ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์„ ๋ถ„์€ ๋“ฑ์‚ฐ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๊ฐ ์„ ๋ถ„์— ์ ํžŒ ์ˆ˜๋Š” ์ด๋™ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1๋ฒˆ ์ง€์ ์—์„œ 2๋ฒˆ ์ง€์ ์œผ๋กœ ์ด๋™ํ•  ๋•Œ๋Š” 3์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์‹œ์—์„œ 1-2-5-4-3 ๊ณผ ๊ฐ™์€ ๋“ฑ์‚ฐ์ฝ”์Šค๋Š” ์ฒ˜์Œ ์ถœ๋ฐœํ•œ ์›๋ž˜์˜ ์ถœ์ž…๊ตฌ๋กœ ๋Œ์•„์˜ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ๋“ฑ์‚ฐ์ฝ”์Šค์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ 1-2-5-6-4-3-2-1 ๊ณผ ๊ฐ™์€ ๋“ฑ์‚ฐ์ฝ”์Šค๋Š” ์ฝ”์Šค์˜ ์ฒ˜์Œ๊ณผ ๋ ์™ธ์— 3๋ฒˆ ์ถœ์ž…๊ตฌ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ๋“ฑ์‚ฐ์ฝ”์Šค์ž…๋‹ˆ๋‹ค.

๋“ฑ์‚ฐ์ฝ”์Šค๋ฅผ 3-2-5-4-3 ๊ณผ ๊ฐ™์ด ์ •ํ–ˆ์„ ๋•Œ์˜ ์ด๋™๊ฒฝ๋กœ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋•Œ, ํœด์‹ ์—†์ด ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ์‹œ๊ฐ„ ์ค‘ ๊ฐ€์žฅ ๊ธด ์‹œ๊ฐ„์€ 5์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋“ฑ์‚ฐ์ฝ”์Šค์˜ intensity๋Š” 5์ž…๋‹ˆ๋‹ค.

๋“ฑ์‚ฐ์ฝ”์Šค๋ฅผ 1-2-4-5-6-4-2-1 ๊ณผ ๊ฐ™์ด ์ •ํ–ˆ์„ ๋•Œ์˜ ์ด๋™๊ฒฝ๋กœ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋•Œ, ํœด์‹ ์—†์ด ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ์‹œ๊ฐ„ ์ค‘ ๊ฐ€์žฅ ๊ธด ์‹œ๊ฐ„์€ 3์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋“ฑ์‚ฐ์ฝ”์Šค์˜ intensity๋Š” 3์ด๋ฉฐ, ์ด ๋ณด๋‹ค intensity๊ฐ€ ๋‚ฎ์€ ๋“ฑ์‚ฐ์ฝ”์Šค๋Š” ์—†์Šต๋‹ˆ๋‹ค.

XX์‚ฐ์˜ ์ง€์  ์ˆ˜ n, ๊ฐ ๋“ฑ์‚ฐ๋กœ์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด paths, ์ถœ์ž…๊ตฌ๋“ค์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ์ •์ˆ˜ ๋ฐฐ์—ด gates, ์‚ฐ๋ด‰์šฐ๋ฆฌ๋“ค์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ์ •์ˆ˜ ๋ฐฐ์—ด summits๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ, intensity๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๋“ฑ์‚ฐ์ฝ”์Šค์— ํฌํ•จ๋œ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋ฒˆํ˜ธ์™€ intensity์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ฐจ๋ก€๋Œ€๋กœ ์ •์ˆ˜ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”. intensity๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๋“ฑ์‚ฐ์ฝ”์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๊ทธ์ค‘ ์‚ฐ๋ด‰์šฐ๋ฆฌ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋“ฑ์‚ฐ์ฝ”์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ์‚ฌํ•ญ

  • 2 ≤ n ≤ 50,000
  • n - 1 ≤ paths์˜ ๊ธธ์ด ≤ 200,000
  • paths์˜ ์›์†Œ๋Š” [i, j, w] ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    • i๋ฒˆ ์ง€์ ๊ณผ j๋ฒˆ ์ง€์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋“ฑ์‚ฐ๋กœ๊ฐ€ ์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.
    • w๋Š” ๋‘ ์ง€์  ์‚ฌ์ด๋ฅผ ์ด๋™ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
    • 1 ≤ i < j ≤ n
    • 1 ≤ w ≤ 10,000,000
    • ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ง€์ ์„ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๋Š” ๋“ฑ์‚ฐ๋กœ๋Š” ์ตœ๋Œ€ 1๊ฐœ์ž…๋‹ˆ๋‹ค.
  • 1 ≤ gates์˜ ๊ธธ์ด ≤ n
    • 1 ≤ gates์˜ ์›์†Œ ≤ n
    • gates์˜ ์›์†Œ๋Š” ํ•ด๋‹น ์ง€์ ์ด ์ถœ์ž…๊ตฌ์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 1 ≤ summits์˜ ๊ธธ์ด ≤ n
    • 1 ≤ summits์˜ ์›์†Œ ≤ n
    • summits์˜ ์›์†Œ๋Š” ํ•ด๋‹น ์ง€์ ์ด ์‚ฐ๋ด‰์šฐ๋ฆฌ์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์ถœ์ž…๊ตฌ์ด๋ฉด์„œ ๋™์‹œ์— ์‚ฐ๋ด‰์šฐ๋ฆฌ์ธ ์ง€์ ์€ ์—†์Šต๋‹ˆ๋‹ค.
  • gates์™€ summits์— ๋“ฑ์žฅํ•˜์ง€ ์•Š์€ ์ง€์ ์€ ๋ชจ๋‘ ์‰ผํ„ฐ์ž…๋‹ˆ๋‹ค.
  • ์ž„์˜์˜ ๋‘ ์ง€์  ์‚ฌ์ด์— ์ด๋™ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๊ฐ€ ํ•ญ์ƒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • return ํ•˜๋Š” ๋ฐฐ์—ด์€ [์‚ฐ๋ด‰์šฐ๋ฆฌ์˜ ๋ฒˆํ˜ธ, intensity์˜ ์ตœ์†Ÿ๊ฐ’] ์ˆœ์„œ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

6 [[1, 2, 3], [2, 3, 5], [2, 4, 2], [2, 5, 4], [3, 4, 4], [4, 5, 3], [4, 6, 1], [5, 6, 1]] [1, 3] [5] [5, 3]
7 [[1, 4, 4], [1, 6, 1], [1, 7, 3], [2, 5, 2], [3, 7, 4], [5, 6, 6]] [1] [2, 3, 4] [3, 4]
7 [[1, 2, 5], [1, 4, 1], [2, 3, 1], [2, 6, 7], [4, 5, 1], [5, 6, 1], [6, 7, 1]] [3, 7] [1, 5] [5, 1]
5 [[1, 3, 10], [1, 4, 20], [2, 3, 4], [2, 4, 6], [3, 5, 20], [4, 5, 6]] [1, 2] [5] [5, 6]

 

โœ๏ธ ํ’€์ด

1. ํ‹€๋ฆฐ ํ’€์ด(ํ”Œ๋กœ์ด๋“œ์™€์ƒฌ - ์‹œ๊ฐ„์ดˆ๊ณผ)

์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์–ด๋–ป๊ฒŒ ํ’€์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ํ”Œ๋กœ์ด๋“œ์™€์ƒฌ์„ ๋Œ๋ฆฌ๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

์šฐ์„  ์ตœ๋Œ€ ๊ฐ€์ค‘์น˜(์†Œ์š”์‹œ๊ฐ„)๋ฅผ ์˜๋ฏธํ•˜๋Š” weight๋ผ๋Š” ์ด์ฐจ์›๋ฐฐ์—ด์„ ์„ ์–ธํ–ˆ๋‹ค. ์ด๋•Œ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜์ง€๋งŒ ๊ฐ€๋Š” ๊ธธ๋ชฉ์˜ ์ตœ๋Œ€ ์†Œ์š”์‹œ๊ฐ„์„ ๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์š”์†Œ๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.

 

์‚ผ์ค‘for๋ฌธ์„ ์ด์šฉํ•ด์„œ ํ”Œ๋กœ์ด๋“œ์™€์ƒฌ์„ ๋Œ๋ ธ๋Š”๋ฐ ๋งŒ์•ฝ ๊ธฐ์ค€์ด ๋˜๋Š” ์ง€์ ์ด ์‚ฐ๋ด‰์˜ค๋ฆฌ๋ผ๋ฉด ๊ณ„์‚ฐํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— (์‚ฐ๋ด‰์˜ค๋ฆฌ๋ฅผ ๊ฑฐ์ณ ๋‹ค๋ฅธ ์‚ฐ๋ด‰์˜ค๋ฆฌ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ๋กœ ๋ฐœ์ƒ) summitsCheck๋ผ๋Š” ์‚ฐ๋ด‰์˜ค๋ฆฌ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” Set ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

 

i์—์„œ j๋กœ ์ด๋™ํ•  ๋•Œ์˜ ์†Œ์š” ์‹œ๊ฐ„๊ณผ i์—์„œ k, k์—์„œ j๋กœ ์ด๋™ํ•  ๋•Œ(k๋ฅผ ๊ฑฐ์ณ๊ฐˆ ๋•Œ) ๊ฑธ๋ฆฌ๋Š” ์ตœ๋Œ€ ์†Œ์š”์‹œ๊ฐ„์„ ๋น„๊ตํ•˜๊ณ  ์ด์ „์— ๋งŒ๋“ค์–ด๋‘” weight ๋ฐฐ์—ด์— ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.

 

์ถœ์ž…๊ตฌ์™€ ์‚ฐ๋ด‰์˜ค๋ฆฌ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ๋ฉด์„œ ๊ฐˆ ์ˆ˜ ์—†์„ ๋•Œ(weight[์ถœ์ž…๊ตฌ][์‚ฐ๋ด‰์˜ค๋ฆฌ]๊ฐ€ 0์ผ ๋•Œ)๋ฅผ ์ œ์™ธํ•˜๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋•Œ answer๋ฅผ ์ตœ์‹ ํ™”ํ•ด์คฌ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ–ˆ๋‹ค.

 

1. ์ •๋‹ต ํ’€์ด(BFS)

์ถœ์ž…๊ตฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ DFS ๋˜๋Š” BFS๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฑด ์–ด๋–จ๊นŒ๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ๋จผ์ € DFS๋ฅผ ๋Œ๋ ธ๋‹ค.

 

์ด๋•Œ check๋ผ๋Š” n+1 ๊ธธ์ด์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์คฌ๋Š”๋ฐ ์ด๋Š” ๊ฐ๊ฐ์˜ ์ถœ์ž…๊ตฌ์—์„œ ์ถœ๋ฐœํ•ด์„œ ํ•ด๋‹น ์ง€์ ๊นŒ์ง€ ๊ฐˆ ๋•Œ์˜ ์—ฃ์ง€ ์ค‘ ์ตœ๋Œ€ ์†Œ์š”์‹œ๊ฐ„์„ ์˜๋ฏธํ•˜๊ณ  ์ตœ์†Œ๊ฐ’์„ ์ €์žฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Infinity๋กœ ์ดˆ๊ธฐํ™”์‹œ์ผฐ๋‹ค.

 

๋จผ์ € ๊ทธ๋ž˜ํ”„ํ™” ์‹œ์ผœ์ฃผ๊ณ  DFS๋ฅผ ๋Œ๋ฉด์„œ ์‚ฐ๋ด‰์˜ค๋ฆฌ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ํ’€์ด์™€ ๋™์ผํ•˜๊ฒŒ summitsCheck๋ผ๋Š” ์‚ฐ๋ด‰์˜ค๋ฆฌ๋ฅผ ๊ฐ€์ง„ Set์„ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

 

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

 

DFS๋ฅผ ๋Œ๋ ธ์„ ๋•Œ๋Š” ๋‘ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. graph๋ฅผ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ Map์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์„ ์–ธํ•ด๋ณด์•˜์ง€๋งŒ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€๊ณ  ๊ณ ๋ฏผ์— ๋น ์กŒ๋‹ค. ๋ฐฐ์—ด์„ ์ด์šฉํ•œ DFS, BFS์—์„œ DFS๋Š” pop()์„ ์‚ฌ์šฉํ•˜๊ณ  BFS๋Š” shift()๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— DFS๋ฅผ ๋Œ๋ ธ๋˜ ๊ฒƒ์ธ๋ฐ ์ถœ์ž…๊ตฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์‚ฐ๋ด‰์˜ค๋ฆฌ๋กœ ๋‹ค๊ฐ€๊ฐˆ ๋•Œ DFS๋ฅผ ๋Œ ๋•Œ ๊ณ„์† ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. 

 

DFS์˜ ๊ฒฝ์šฐ ์ถœ์ž…๊ตฌ1๋ถ€ํ„ฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ๋ชจ๋“  ์ง€์ ์„ ๋Œ๋ฉด์„œ ์ตœ๋Œ€ ์†Œ์š”์‹œ๊ฐ„์„ 2๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์Œ ์ถœ์ž…๊ตฌ2๋ฅผ ๋Œ๋ฉด ๋ชจ๋‘ 1๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ BFS๋ฅผ ๋Œ๋ ธ์„ ๋•Œ ์ œ์ผ ์ฒ˜์Œ ์ถœ์ž…๊ตฌ๋“ค๊ณผ ์—ฐ๊ฒฐ๋œ ์ง€์ ์—์„œ๋งŒ ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜๊ณ  ๋‹ค๋จธ์ง€๋Š” ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋  ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ BFS๋กœ ๋ณ€๊ฒฝํ–ˆ๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

โŒจ๏ธ  ์‹œ๊ฐ„์ดˆ๊ณผ ์ฝ”๋“œ

function solution(n, paths, gates, summits) {
  var answer = [0, Infinity];

  const weight = [...Array(n + 1)].map(_ => new Array(n + 1).fill(0));
  for (const path of paths) {
    const [n1, n2, w] = path;
    weight[n1][n2] = w;
    weight[n2][n1] = w;
  }

  const summitsCheck = new Set();
  for (const summit of summits) summitsCheck.add(summit);

  for (let k = 1; k < n + 1; k++) {
    if (summitsCheck.has(k)) continue;

    for (let i = 1; i < n + 1; i++) {
      for (let j = 1; j < n + 1; j++) {
        if (!weight[i][k] || !weight[k][j]) continue;

        const min = Math.max(weight[i][k], weight[k][j]);
        if (weight[i][j]) {
          if (weight[i][j] > min) weight[i][j] = min;
        } else weight[i][j] = min;
      }
    }
  }

  summits.sort((a, b) => a - b);
  for (const gate of gates) {
    for (const summit of summits) {
      if (!weight[gate][summit]) continue;

      if (weight[gate][summit] < answer[1]) {
        answer[0] = summit;
        answer[1] = weight[gate][summit];
      }
    }
  }

  return answer;
}

 

โŒจ๏ธ  ์ •๋‹ต ์ฝ”๋“œ

function solution(n, paths, gates, summits) {
  var answer = [0, Infinity];

  const graph = {};
  for (const path of paths) {
    const [n1, n2, w] = path;
    if (graph[n1]) graph[n1].push([n2, w]);
    else graph[n1] = [[n2, w]];
    if (graph[n2]) graph[n2].push([n1, w]);
    else graph[n2] = [[n1, w]];
  }

  const summitsCheck = new Set();
  for (const summit of summits) summitsCheck.add(summit);

  const queue = gates.map(gate => [gate, 0]);

  const check = new Array(n + 1).fill(Infinity);
  while (queue.length) {
    const [node, min] = queue.shift();
    for (const [next, w] of graph[node]) {
      if (check[next] <= w) continue;
      if (check[next] <= min) continue;
      check[next] = Math.max(w, min);

      if (summitsCheck.has(next)) continue;
      queue.push([next, check[next]]);
    }
  }

  summits.sort((a, b) => a - b);
  for (const summit of summits) {
    if (answer[1] > check[summit]) {
      answer = [summit, check[summit]];
    }
  }

  return answer;
}