[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋“ฑ์‚ฐ์ฝ”์Šค ์ •ํ•˜๊ธฐ (C++)

2023. 9. 18. 17:50ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

https://school.programmers.co.kr/learn/courses/30/lessons/118669#qna

๋ฌธ์ œ ์„ค๋ช…

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๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๋“ฑ์‚ฐ์ฝ”์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ๊ทธ์ค‘ ์‚ฐ๋ด‰์šฐ๋ฆฌ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋“ฑ์‚ฐ์ฝ”์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ’€์ด

๊ฐ€์žฅ ๋‚ฎ์€ intensity๋ฅผ ๊ฐ€์ง„ ๊ฒฝ๋กœ์˜ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ์™€ ๊ทธ intensity๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ vs ๋‹ค์ต์ŠคํŠธ๋ผ vs BFS ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผํ• ๊นŒ?

  • ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ถœ์ž…๊ตฌ์™€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ •์ƒ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ๋กœ ํ’€์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ฌธ์ œ์ด์ง€๋งŒ ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ๋กœ๋Š” ๋ฌธ์ œ๊ฐ€ ํ’€๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ ์ค‘ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์˜ ๊ฒฝ๋กœ๋ฅผ ์•Œ๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ๊ฒฝ๋กœ ์ค‘์—์„œ ๊ฐ€์žฅ ๋น„์šฉ์ด ํฐ ๊ธธ์˜ ๋น„์šฉ์„ ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋‹ค์ต์ŠคํŠธ๋ผ : “์ถœ์ž…๊ตฌ → ์ •์ƒ → ์ถœ์ž…๊ตฌ” ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ์ตœ๋‹จ๊ฑฐ๋ฆฌ “์ถœ์ž…๊ตฌ→์ •์ƒ” ์ฝ”์Šค์™€ “์ •์ƒ→์ถœ์ž…๊ตฌ” ์ฝ”์Šค๋Š” ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋…ธ๋“œ(์ถœ์ž…๊ตฌ)์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
  • BFS : ๋ช‡๋ช‡ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ํ‘ธ๋Š”๋ฐ, ์‚ฌ์‹ค ์ด ๋ฌธ์ œ๋Š” ์ตœ๋‹จ๊ฑฐ๋ฆฌ์™€๋Š” ์ƒ๊ด€์—†๋‹ค. BFS๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ์˜คํžˆ๋ ค ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ณผํ•œ ๋А๋‚Œ…?

์—ฌ๋Ÿฌ ์ถœ์ž…๊ตฌ ์ค‘์—์„œ ์–ด๋–ค ์ถœ์ž…๊ตฌ๋ฅผ ์„ ํƒํ•  ๊ฒƒ์ธ๊ฐ€?

  • ์–ผํ•๋ณด๋ฉด ์ถœ์ž…๊ตฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด๋ณด์ด์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ์™€ ๊ทธ intensity ๋ฟ์ด๋‹ค.

์–ด๋–ป๊ฒŒ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ์™€ ๊ทธ intensity๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์„๊นŒ?

  • ํฌ์ธํŠธ๋Š” ์•„๋ฌด ์ถœ์ž…๊ตฌ์—์„œ ์•„๋ฌด ์‚ฐ๋ด‰์šฐ๋ฆฌ์— ๋„์ฐฉํ•˜๋Š” ๊ฒƒ ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์‚ฐ๋ด‰์šฐ๋ฆฌ์™€ intensity๋ฅผ ์ €์žฅํ•˜๊ณ  ๋น„๊ตํ•˜์—ฌ ๊ฐ€์žฅ intensity๊ฐ€ ์ ์€ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ํ’€์ด ๊ณผ์ •
    1. ๋ชจ๋“  ์ถœ์ž…๊ตฌ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค.
    2. ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๊ฐ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉฐ intensity๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
      1. ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ์ผ ๋•Œ
        1. ์ด์ „๋ฒ  ๋ฐฉ๋ฌธํ–ˆ๋˜ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์ •๋‹ต์œผ๋กœ ๋“ฑ๋ก
        2. ์ด์ „์— ๋ฐฉ๋ฌธํ–ˆ๋˜ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ๋ณด๋‹ค ์ ์€ intensity๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์ •๋‹ต์œผ๋กœ ๋“ฑ๋ก
        โ—์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. (์‚ฐ๋ด‰์šฐ๋ฆฌ๊ฐ€ ๋งˆ์ง€๋ง‰)
      2. ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์ผ๋ฐ˜ ๋…ธ๋“œ์ผ ๋•Œ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ํ•˜๋‚˜์”ฉ ๋ฐฉ๋ฌธ
        1. ์ด๋•Œ ํ˜„์žฌ๊นŒ์ง€ intensity์™€ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์„ ๋น„๊ตํ•ด์„œ ๋” ํฐ ๊ฒƒ์„ intensity๋กœ ๋“ฑ๋กํ•ด์„œ ํ์— ๋„ฃ์–ด์ค€๋‹ค.
        2. ๋‹ค์Œ ๋…ธ๋“œ์— ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜ ํ˜„์žฌ ๊ฒฝ๋กœ์˜ intensity๊ฐ€ ๋” ์งง์€ ๊ฒฝ์šฐ์—๋งŒ ํ์— ๋„ฃ์–ด์ค€๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„ ์ค„์ด๊ธฐ

  1. ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ, NxN ์‚ฌ์ด์ฆˆ์˜ ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด ๋ชจ๋“  ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋Œ€์‹  pair<int, int>์„ ์‚ฌ์šฉํ•ด ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์™€ ๋น„์šฉ๋งŒ ์ €์žฅํ•œ๋‹ค.
  2. n๋ฒˆ์งธ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ์†Œ intensity๋ฅผ ์ €์žฅํ•˜์—ฌ, ์ €์žฅ๋œ intensity๋ณด๋‹ค ๋” ํด ๊ฒฝ์šฐ ํ์— ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
  3. ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ์ธ์ง€ ์‰ฝ๊ฒŒ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด bool ๋ฐฐ์—ด๋กœ ์‚ฐ๋ด‰์šฐ๋ฆฌ ๋…ธ๋“œ๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ ๋ฒ„์ „

#include <string>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

vector<int> solution(int n, vector<vector<int>> paths, vector<int> gates, vector<int> summits) {
    vector<int> answer(2, -1);
    vector<vector<pair<int, int>>> map(n+1); // first->n๋ฒˆ์งธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ, second->์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ
    vector<long long> distance(n+1, -1);    // n๋ฒˆ์งธ ๋…ธ๋“œ๊นŒ์ง€ ์ตœ์†Œ intensity
    vector<bool> isSummit(n+1, false); // ์ •์ƒ ํ™•์ธ์šฉ
    priority_queue<pair<int, int>, vector<pair<int,int>>, greater<pair<int,int>>> pq; // first->intensity, second->๋…ธ๋“œ ์ธ๋ฑ์Šค
    
    // ์ •์ƒํ‘œ์‹œ
    for(auto s : summits)
        isSummit[s] = true;
    
    // map์— ๊ฒฝ๋กœ ์ž…๋ ฅ
    for(const auto& p : paths)
    {
        map[p[0]].push_back({p[1],p[2]});
        map[p[1]].push_back({p[0],p[2]});
    }
    
    // ์ถœ์ž…๊ตฌ queue์— ์ถ”๊ฐ€
    for(auto g : gates)
    {
        distance[g] = 0;
        pq.push({distance[g], g});
    }
    
    // ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ
    while(!pq.empty())
    {
        int curN = pq.top().second;
        int intensity = pq.top().first;
        pq.pop();
        
        // ์ด๋ฏธ ์ •๋‹ต์ด ์žˆ๊ณ  ๊ทธ intensity๊ฐ€ ๋” ์ž‘์„ ๊ฒฝ์šฐ
        if(answer[0] != -1 && answer[1] < intensity)
            continue;
            
        // ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์ •์ƒ์ด๋ผ๋ฉด
        if(isSummit[curN])
        {
            // intensity๊ฐ€ ๋” ์ž‘์€ ๊ฒฝ์šฐ ๋˜๋Š” ์•„์ง ๋“ฑ๋ก๋œ ๊ฒฝ๋กœ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ •๋‹ต์œผ๋กœ ๋“ฑ๋ก
            if(intensity < answer[1] 
               || answer[0] == -1)
            {
                answer[0] = curN;
                answer[1] = intensity;
            }
            // intensity๊ฐ€ ๊ฐ™๊ณ  ํ˜„์žฌ ์ •์ƒ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋” ๋‚ฎ์€ ๊ฒฝ์šฐ ์ •๋‹ต์œผ๋กœ ๋“ฑ๋ก
            else if(intensity == answer[1]
                   && curN < answer[0])
            {
                answer[0] = curN;
            }
            
            continue;
        }
        
        
        // ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ๊ตฌํ•˜๊ธฐ
        for(int i = 0; i < map[curN].size(); ++i)
        {
            int nextN = map[curN][i].first;
            int nextIntensity = map[curN][i].second;
            nextIntensity = max(intensity, nextIntensity);
            
            // ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜ ํ˜„์žฌ ๊ฒฝ๋กœ๊ฐ€ ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์€ ๊ฒฝ์šฐ
            if(distance[nextN] == -1 || nextIntensity < distance[nextN])
            {
                distance[nextN] = nextIntensity;
                pq.push({nextIntensity, nextN});
            }
        }
        
    }

    
    return answer;
}

BFS ๋ฒ„์ „

์ตœ๋‹จ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ” ๋Œ€์‹  distance ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— priority_queue๋งŒ queue๋กœ ๋ฐ”๊พธ๋ฉด ๊ทธ๋ƒฅ BFS์ด๋‹ค.

#include <string>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

vector<int> solution(int n, vector<vector<int>> paths, vector<int> gates, vector<int> summits) {
    vector<int> answer(2, -1);
    vector<vector<pair<int, int>>> map(n+1); // first->n๋ฒˆ์งธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ, second->์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ
    vector<long long> distance(n+1, -1);    // n๋ฒˆ์งธ ๋…ธ๋“œ๊นŒ์ง€ ์ตœ์†Œ intensity
    vector<bool> isSummit(n+1, false); // ์ •์ƒ ํ™•์ธ์šฉ
    queue<pair<int, int>> q;
    
    // ์ •์ƒํ‘œ์‹œ
    for(auto s : summits)
        isSummit[s] = true;
    
    // map์— ๊ฒฝ๋กœ ์ž…๋ ฅ
    for(const auto& p : paths)
    {
        map[p[0]].push_back({p[1],p[2]});
        map[p[1]].push_back({p[0],p[2]});
    }
    
    // ์ถœ์ž…๊ตฌ queue์— ์ถ”๊ฐ€
    for(auto g : gates)
    {
        distance[g] = 0;
        q.push({distance[g], g});
    }
    
    // ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ
    while(!q.empty())
    {
        int curN = q.front().second;
        int intensity = q.front().first;
        q.pop();
        
        // ์ด๋ฏธ ์ •๋‹ต์ด ์žˆ๊ณ  ๊ทธ intensity๊ฐ€ ๋” ์ž‘์„ ๊ฒฝ์šฐ
        if(answer[0] != -1 && answer[1] < intensity)
            continue;
            
        // ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ์ •์ƒ์ด๋ผ๋ฉด
        if(isSummit[curN])
        {
            // intensity๊ฐ€ ๋” ์ž‘์€ ๊ฒฝ์šฐ ๋˜๋Š” ์•„์ง ๋“ฑ๋ก๋œ ๊ฒฝ๋กœ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ •๋‹ต์œผ๋กœ ๋“ฑ๋ก
            if(intensity < answer[1] 
               || answer[0] == -1)
            {
                answer[0] = curN;
                answer[1] = intensity;
            }
            // intensity๊ฐ€ ๊ฐ™๊ณ  ํ˜„์žฌ ์ •์ƒ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋” ๋‚ฎ์€ ๊ฒฝ์šฐ ์ •๋‹ต์œผ๋กœ ๋“ฑ๋ก
            else if(intensity == answer[1]
                   && curN < answer[0])
            {
                answer[0] = curN;
            }
            
            continue;
        }
        
        
        // ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ๊ตฌํ•˜๊ธฐ
        for(int i = 0; i < map[curN].size(); ++i)
        {
            int nextN = map[curN][i].first;
            int nextIntensity = map[curN][i].second;
            nextIntensity = max(intensity, nextIntensity);
            
            // ์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ๊ฑฐ๋‚˜ ํ˜„์žฌ ๊ฒฝ๋กœ๊ฐ€ ๊ฑฐ๋ฆฌ๊ฐ€ ๋” ์งง์€ ๊ฒฝ์šฐ
            if(distance[nextN] == -1 || nextIntensity < distance[nextN])
            {
                distance[nextN] = nextIntensity;
                q.push({nextIntensity, nextN});
            }
        }
        
    }

    
    return answer;
}

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ–ฅ๏ธ Study Note > Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.2 - ๋ฐฉ๋ฌธ ๊ธธ์ด (C++)  (0) 2023.09.21
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋ณด์„ ์‡ผํ•‘ (C++)  (0) 2023.09.20
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ์–‘๊ณผ ๋Š‘๋Œ€ (C++)  (0) 2023.09.14
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋ฏธ๋กœ ํƒˆ์ถœ ๋ช…๋ น์–ด (C++)  (0) 2023.09.07
[BOJ 11657] ๋ฐฑ์ค€ ํƒ€์ž„๋จธ์‹  - C++ ํ’€์ด  (0) 2023.09.06
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.2 - ๋ฐฉ๋ฌธ ๊ธธ์ด (C++)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋ณด์„ ์‡ผํ•‘ (C++)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ์–‘๊ณผ ๋Š‘๋Œ€ (C++)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋ฏธ๋กœ ํƒˆ์ถœ ๋ช…๋ น์–ด (C++)
Beankong_
Beankong_
์ฃผ๋‹ˆ์–ด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ณต๋ถ€ ๊ธฐ๋ก
  • Beankong_
    Beankong's Devlog
    Beankong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (146)
      • โ›… Daily (0)
      • ๐Ÿ–ฅ๏ธ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • ๐Ÿงญ Devlog (8)
        • ์˜ค๋‹ต๋…ธํŠธ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

    • ๊ณต์ง€์‚ฌํ•ญ

    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      UnrealEngine
      unrealengine module
      ํ—ฌํ…Œ์ด์ปค
      ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ
      ๊ฒŒ์ž„ ๋ชจ์ž‘
      OnlineSubsystem
      propertyaccess
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      ํ”„๋ฃŒ๊ทธ๋ž˜๋จธ์Šค
      unrealengine build system
      programmers
      ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      UnrealEngine5
      ๊ทธ๋ฆฌ๋””(greedy)
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ๊ฒŒ์ž„ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      cpp
      ๊ฒŒ์ž„ ๊ฐœ๋ฐœ
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
    Beankong_
    [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]level.3 - ๋“ฑ์‚ฐ์ฝ”์Šค ์ •ํ•˜๊ธฐ (C++)
    ์ƒ๋‹จ์œผ๋กœ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”