์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[KB IT's your life 7๊ธฐ] ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํŠน๊ฐ• ์‹œ์ž‘! ์ž๋ฃŒ๊ตฌ์กฐ·์•Œ๊ณ ๋ฆฌ์ฆ˜·์‹œ๊ฐ„๋ณต์žก๋„·๊ทธ๋ž˜ํ”„๊นŒ์ง€

yeye 2026. 5. 19. 17:03

์•ˆ๋…•ํ•˜์„ธ์š”, KB IT's Your Life 7๊ธฐ ๊ธฐ์ž๋‹จ์ž…๋‹ˆ๋‹ค!

๋“œ๋””์–ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํŠน๊ฐ•์ด ์‹œ์ž‘๋์–ด์š”!!

๋๊นŒ์ง€ ์žฌ๋ฏธ์žˆ๊ฒŒ ์ฝ์–ด์ฃผ์„ธ์š”! ๐Ÿš€


๐Ÿ“Œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋ญ”๋ฐ?

์ˆ˜์—… ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ๋“ค์–ด๊ฐ”์–ด์š”.

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”.
์˜์–ด๋กœ Data Structure. ์ด๋ ‡๊ฒŒ ๋งํ•˜๋ฉด ๋ญ”๊ฐ€ ๋Œ€๋‹จํ•ด ๋ณด์ด๋Š”๋ฐ ์‚ฌ์‹ค ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์“ฐ๊ณ  ์žˆ๋Š” ๊ฑฐ์˜ˆ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ํ•™์ƒ ์ด๋ฆ„์„ ์ €์žฅํ•œ๋‹ค๊ณ  ํ•ด๋ณผ๊ฒŒ์š”.

String student1 = "๊น€๋ฏผ์ˆ˜";
String student2 = "์ด์„œ์—ฐ";
String student3 = "๋ฐ•์ง€ํ›ˆ";

์ด๊ฒƒ๋„ ์ž๋ฃŒ๊ตฌ์กฐ์˜ˆ์š”. ๋ณ€์ˆ˜์— ํ•˜๋‚˜์”ฉ ๋‹ด์€ ๊ฑฐ์ฃ .
๊ทผ๋ฐ ์ด๋Ÿฌ๋ฉด "์ „์ฒด ํ•™์ƒ ์ด๋ฆ„ ์ถœ๋ ฅํ•ด์ค˜" ํ•  ๋•Œ ์ผ์ผ์ด ๋‹ค ์จ์•ผ ๋˜์ž–์•„์š”.

String[] students = {"๊น€๋ฏผ์ˆ˜", "์ด์„œ์—ฐ", "๋ฐ•์ง€ํ›ˆ"};
for (String s : students) {
    System.out.println(s);
}


๋ฐฐ์—ด๋กœ ๋ฐ”๊พธ๋ฉด ๋ฐ˜๋ณต๋ฌธ ํ•˜๋‚˜๋กœ ๋๋‚˜์š”.
๋˜‘๊ฐ™์€ ๋ฐ์ดํ„ฐ์ธ๋ฐ ์–ด๋–ป๊ฒŒ ์ €์žฅํ•˜๋А๋ƒ์— ๋”ฐ๋ผ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฑฐ์˜ˆ์š”.
์ด๊ฒŒ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ•ต์‹ฌ์ด์—ˆ์–ด์š”.

๊ฐ•์‚ฌ๋‹˜์ด HashMap ์˜ˆ์‹œ๋„ ๋ณด์—ฌ์ฃผ์…จ๋Š”๋ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๋กœ ์ ์ˆ˜๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ ๋ณด๊ณ  ์•„ ์ด๋ž˜์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŽ์ด ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฑฐ๊ตฌ๋‚˜์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.


์•Œ๊ณ ๋ฆฌ์ฆ˜ = ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ž๋ฃŒ๊ตฌ์กฐ ๋‹ค์Œ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์—์š”.

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•˜๋ฉด ๋ญ”๊ฐ€ ์ˆ˜ํ•™ ๊ณต์‹ ๊ฐ™๊ณ  ์–ด๋ ค์›Œ ๋ณด์ด๋Š”๋ฐ
๊ฐ•์‚ฌ๋‹˜ ์„ค๋ช… ๋“ค์œผ๋‹ˆ๊นŒ ์˜์™ธ๋กœ ๋‹จ์ˆœํ–ˆ์–ด์š”.

๊ณต 5๊ฐœ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด
๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋ฅผ ์ฐพ์•„์„œ ๋งจ ์•ž์— ๋†“๊ณ , ๋‚จ์€ ๊ณต๋“ค์—์„œ ๋˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฑธ ์ฐพ์•„์„œ ๋†“๋Š”
์ด ๊ณผ์ • ์ž์ฒด๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž˜์š”.

๊ทธ๋ž˜์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•  ๋•Œ ์ •๋‹ต์ด ํ•˜๋‚˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ๋‚ด๋ ค๋†“์•„์•ผ ํ•œ๋‹ค๋”๋ผ๊ณ ์š”!
์˜คํžˆ๋ ค ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์—ด์–ด๋‘๊ณ  ๊ทธ์ค‘์— ํšจ์œจ์ ์ธ ๊ฑธ ๊ณ ๋ฅด๋Š” ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๋Š” ๋ง์ด ์ธ์ƒ ๊นŠ์—ˆ์–ด์š”.


์‹œ๊ฐ„ ๋ณต์žก๋„

1์ผ์ฐจ์—์„œ ๊ฐ€์žฅ ์ง‘์ค‘ํ•ด์„œ ๋“ค์—ˆ๋˜ ํŒŒํŠธ๊ฐ€ ์‹œ๊ฐ„ ๋ณต์žก๋„์˜ˆ์š”.

์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋ญ๋ƒ๋ฉด ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋А๋ƒ๋ฅผ ์ˆ˜์น˜ํ™”ํ•œ ๊ฑฐ์˜ˆ์š”.


์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด CPU๊ฐ€ ํ•œ ์ค„ ํ•œ ์ค„ ์ฒ˜๋ฆฌํ•˜์ž–์•„์š”.
๋ฐ˜๋ณต๋ฌธ์ด ์žˆ์œผ๋ฉด ๊ทธ ์•ˆ์˜ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋˜๋‹ˆ๊นŒ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜์š”.
์ž…๋ ฅ๊ฐ’ n์ด ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๋Š˜์–ด๋‚˜๋А๋ƒ๋ฅผ ํ•จ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒŒ ์‹œ๊ฐ„ ๋ณต์žก๋„์ธ ๊ฑฐ์˜ˆ์š”.

๊ทผ๋ฐ ๋งค๋ฒˆ 5Nยฒ + 3N + 30 ์ด๋Ÿฐ ์‹์œผ๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์“ฐ๊ธฐ ๊ท€์ฐฎ์ž–์•„์š”.
๊ทธ๋ž˜์„œ ๊ฐ€์žฅ ํฐ ํ•ญ๋งŒ ๋”ฑ ๋–ผ์„œ ๋Œ€๋žต์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒŒ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•(Big-O Notation)์ด์—์š”.

  • 5Nยฒ + 3N + 30 โ†’ O(Nยฒ)
  • 10M + 5 โ†’ O(M)
  • ์ƒ์ˆ˜๋งŒ ์žˆ์œผ๋ฉด โ†’ O(1)

์ด๋ ‡๊ฒŒ ๋Œ€๊ฐ• ํ‘œํ˜„ํ•˜์ž! ๊ฐ€ ํ•ต์‹ฌ์ด์—ˆ์–ด์š”.

๊ฐ•์‚ฌ๋‹˜์ด ํ€ด์ฆˆ๋ฅผ 6๊ฐœ๋‚˜ ๋‚ด์…จ๋Š”๋ฐ, ์ฒ˜์Œ์—๋Š” ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ–ˆ์–ด์š”.

๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋Š” ์ฝ”๋“œ โ†’ O(M)
์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ(for ์•ˆ์— for) โ†’ O(Nยฒ)

์–ด๋ ค์› ๋˜ ๋ฌธ์ œ๋„ ์žˆ์—ˆ์–ด์š”
๋ฐ˜๋ณต๋ฌธ์ด ๋‘ ๊ฐœ ์žˆ๋Š”๋ฐ, j์˜ ์ดˆ๊ธฐํ™”๊ฐ€ for๋ฌธ ๋ฐ”๊นฅ์— ์žˆ๋Š” ์ฝ”๋“œ์˜€๊ฑฐ๋“ ์š”.
๋‹ค๋“ค ๋ฐ˜๋ณต๋ฌธ ๋‘ ๊ฐœ๋‹ˆ๊นŒ N์ œ๊ณฑ์ด์ง€!๋ผ ์ƒ๊ฐ ํ–ˆ๋Š”๋ฐ

์ •๋‹ต์€ O(N)์ด์—ˆ์–ด์š”.

์™œ๋ƒ๋ฉด j๊ฐ€ ๋ฐ”๊นฅ์—์„œ ๋”ฑ ํ•œ ๋ฒˆ ์ดˆ๊ธฐํ™”๋˜๊ณ  ๋‚˜๋ฉด, while๋ฌธ์ด ์ „์ฒด์ ์œผ๋กœ N๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ณ  ๋๋‚˜๊ฑฐ๋“ ์š”.
์ดํ›„์— i๊ฐ€ ์•„๋ฌด๋ฆฌ ์˜ฌ๋ผ๊ฐ€๋„ j๋Š” ์ด๋ฏธ N์ด ๋ผ๋ฒ„๋ ค์„œ while๋ฌธ ์•ˆ์œผ๋กœ ๋ชป ๋“ค์–ด๊ฐ€์š”.

์ด ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด์„œ ๊ฐ•์‚ฌ๋‹˜์ด ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๋ง์€ ์ด๊ฑฐ์˜€์–ด์š”:

"๋ฐ˜๋ณต๋ฌธ ๋ช‡ ๊ฐœ๋‹ˆ๊นŒ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์–ด๋–ป๋‹ค" ์ด๋ ‡๊ฒŒ ๊ธฐ๊ณ„์ ์œผ๋กœ ์™ธ์šฐ๋ฉด ์•ˆ ๋ผ์š”.
์‹ค์ œ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ์ดํ•ดํ•ด์•ผ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

O(N log N)๋„ ๋‚˜์™”์–ด์š”

์˜คํ›„์—๋Š” j *= 2๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฐ˜๋ณต๋ฌธ์ด ๋‚˜์™”๋Š”๋ฐ, ์ด๊ฒŒ ๋ฐ”๋กœ ๋กœ๊ทธ์˜ˆ์š”.

2๋ฅผ ๋ช‡ ๋ฒˆ ๊ณฑํ•ด์•ผ N์ด ๋˜๋А๋ƒ = log N๋ฒˆ.
N์ด 128์ด๋ฉด 7๋ฒˆ, 1024๋ฉด 10๋ฒˆโ€ฆ ์•„๋ฌด๋ฆฌ N์ด ์ปค์ ธ๋„ log N์€ ์ฒœ์ฒœํžˆ ์˜ฌ๋ผ๊ฐ€์š”.

๋ฐ”๊นฅ์— N๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” for๋ฌธ์ด ์žˆ๊ณ , ์•ˆ์— log N๋ฒˆ ๋„๋Š” while๋ฌธ์ด ์žˆ์œผ๋ฉด โ†’ O(N log N)

๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ๋„ j ์ดˆ๊ธฐํ™” ์œ„์น˜์— ๋”ฐ๋ผ O(N log N)์ด ๋  ์ˆ˜๋„ ์žˆ๊ณ  O(N)์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ํ•จ์ •์ด ์žˆ์—ˆ์–ด์š”.
์•„๊นŒ ๊ทธ ํŒจํ„ด์ด๋ž‘ ๋˜‘๊ฐ™์€ ๊ฑฐ์˜ˆ์š”. j๊ฐ€ ๋ฐ”๊นฅ์—์„œ ์ดˆ๊ธฐํ™”๋˜๋ฉด while๋ฌธ์ด ์ „์ฒด์—์„œ ๋”ฑ log N๋ฒˆ๋งŒ ๋Œ๊ณ  ๋๋‚˜๋‹ˆ๊นŒ์š”.


์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์‹ค์ „์—์„œ ์–ด๋–ป๊ฒŒ ์“ธ๊นŒ?

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์ง„์งœ ๊ฟ€ํŒ์ด ๋‚˜์™”์–ด์š”.

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ์ œ์•ฝ ์กฐ๊ฑด์— N์˜ ๋ฒ”์œ„๊ฐ€ ์ ํ˜€ ์žˆ๊ฑฐ๋“ ์š”.
์˜ˆ๋ฅผ ๋“ค์–ด "N โ‰ค 10โต" ์ด๋ ‡๊ฒŒ์š”.

์ด๋•Œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ํ’€์ด๊ฐ€ O(Nยฒ)์ด๋ฉด?
โ†’ (10โต)ยฒ = 10ยนโฐ โ†’ 10โธ(์•ฝ 1์ดˆ) ๊ธฐ์ค€์„ ํ›จ์”ฌ ๋„˜๊น€ โ†’ ์‹œ๊ฐ„ ์ดˆ๊ณผ!

๊ทธ๋ž˜์„œ O(N log N)์ด๋‚˜ O(N)์œผ๋กœ ํ’€ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”.


๊ฐ•์‚ฌ๋‹˜ ๋ง์”€์ด 10โต๊ฐ€ ๋ณด์ด๋ฉด ์ถœ์ œ์ž๊ฐ€ ํžŒํŠธ๋ฅผ ์ฃผ๋Š” ๊ฑฐ๋‹ค. N์ œ๊ณฑ์œผ๋กœ ํ’€์ง€ ๋ง๋ผ๋Š” ๋œป์ด๋ž˜์š”.


์™„์ „ ํƒ์ƒ‰ โ€” ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์˜ ๊ธฐ๋ณธ ์ค‘์˜ ๊ธฐ๋ณธ

์‹œ๊ฐ„ ๋ณต์žก๋„ ๋๋‚˜๊ณ  ๋ฐ”๋กœ ์™„์ „ ํƒ์ƒ‰(Brute Force) ์„ค๋ช…์ด ๋‚˜์™”์–ด์š”.

์™„์ „ ํƒ์ƒ‰์€ "๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํ•ด๋ณด๋Š” ๊ฒƒ"์ด์—์š”.
์ปดํ“จํ„ฐ์˜ ๊ฐ•์ ์ด ๋ญ์˜ˆ์š”? ์šฐ๋ฆฌ๋ณด๋‹ค ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋ช‡์ฒœ๋งŒ ๋ฐฐ ๋น ๋ฅด๋‹ค๋Š” ๊ฑฐ์ž–์•„์š”.
๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ๋‹ค ์‹œ์ผœ๋ณด๋Š” ๊ฑฐ์˜ˆ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐ์—ด์—์„œ ํƒ€๊ฒŸ๊ฐ’ 5๋ฅผ ์ฐพ์œผ๋ผ๊ณ  ํ•˜๋ฉด,
์•ž์—์„œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•˜๋ฉด ๋˜์ฃ . ์ด๊ฒŒ ์™„์ „ ํƒ์ƒ‰์ด์—์š”.


"๋‘ ์ˆ˜์˜ ํ•ฉ์ด 14๊ฐ€ ๋˜๋Š” ์ธ๋ฑ์Šค ์Œ์„ ์ฐพ์•„๋ผ" ๊ฐ™์€ ๋ฌธ์ œ๋„,
์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋ชจ๋“  ์กฐํ•ฉ์„ ๋‹ค ํ•ด๋ณด๋ฉด ํ’€๋ ค์š”. O(Nยฒ)์ด์ง€๋งŒ ํ’€๋ฆฌ๊ธด ํ’€๋ฆฌ๋Š” ๊ฑฐ์ฃ .

๊ฐ•์‚ฌ๋‹˜์ด ๊ฐ•์กฐํ•˜์‹  ๊ฑด, ์•ž์œผ๋กœ ๋ฐฐ์šธ DFS, BFS, ํ•ด์‹œํ…Œ์ด๋ธ” ๊ฐ™์€ ๊ฒƒ๋“ค๋„ ๊ฒฐ๊ตญ ์™„์ „ ํƒ์ƒ‰์„ ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฑฐ์˜ˆ์š”.
๊ธฐ๋ณธ์ด ์™„์ „ ํƒ์ƒ‰์ด๊ณ , ๊ฑฐ๊ธฐ์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋‚˜๋ฉด ๋” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐพ๋Š” ํ๋ฆ„์ธ ๊ฑฐ์ฃ .


๊ทธ๋ž˜ํ”„, BFS, DFS

2์ผ์ฐจ๋Š” ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ทธ๋ž˜ํ”„์— ๋“ค์–ด๊ฐ”์–ด์š”.
์ด๋‚ ๋ถ€ํ„ฐ ๋จธ๋ฆฌ๊ฐ€ ์ง„์งœ ๋ฐ”๋น ์กŒ์Šต๋‹ˆ๋‹คโ€ฆ

๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๋ฐฉ๋ฒ•

๊ทธ๋ž˜ํ”„๋ฅผ ์ฝ”๋“œ๋กœ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•˜๋ƒ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๊ด€๋ฌธ์ด์—ˆ์–ด์š”.

๊ฐ„์„  ๋ฆฌ์ŠคํŠธ: ๋ฌธ์ œ์—์„œ ๋ณดํ†ต ์ด ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ ธ์š”. [[0,1], [0,2], [3,1]] ์ด๋Ÿฐ ์‹์œผ๋กœ "๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ๋ž‘ ์—ฐ๊ฒฐ๋๋‹ค"๋งŒ ์ญ‰ ๋‚˜์—ดํ•œ ๊ฑฐ์˜ˆ์š”.

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ: ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์ฝ”๋“œ์—์„œ ์“ธ ํ˜•ํƒœ์˜ˆ์š”. ๊ฐ ๋…ธ๋“œ๋ณ„๋กœ "๋‚˜๋ž‘ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๊ฐ€ ๋ˆ„๊ตฌ๋ˆ„๊ตฌ๋‹ค"๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ์ •๋ฆฌํ•œ ๊ฑฐ์˜ˆ์š”.

๋ฌธ์ œ์—์„œ๋Š” ๊ฐ„์„  ๋ฆฌ์ŠคํŠธ๋กœ ์ฃผ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์จ์•ผ ํ•ด์š”.
์ด ๋ณ€ํ™˜ ์ฝ”๋“œ๊ฐ€ ๊ฑฐ์˜ ๋ชจ๋“  ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ์—์„œ ํ…œํ”Œ๋ฆฟ์ฒ˜๋Ÿผ ์“ฐ์ธ๋‹ค๊ณ  ํ•˜์…จ์–ด์š”.

// ๊ฐ„์„  ๋ฆฌ์ŠคํŠธ โ†’ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋ณ€ํ™˜ (์–‘๋ฐฉํ–ฅ)
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i < n; i++) {
    graph.add(new ArrayList<>());
}
for (int[] edge : edges) {
    graph.get(edge[0]).add(edge[1]);
    graph.get(edge[1]).add(edge[0]); // ์–‘๋ฐฉํ–ฅ์ด๋ฉด ์ด๊ฒƒ๋„ ์ถ”๊ฐ€
}


์ด๊ฑฐ ๊ฐ•์‚ฌ๋‹˜์ด ํ•œ 20~30๋ฒˆ ๊ตฌํ˜„ํ•ด๋ด์„œ ๊ทธ๋ƒฅ ์ˆ ์ˆ  ๋‚˜์™€์•ผ ํ•œ๋‹ค๊ณ  ํ•˜์…จ์–ด์š”.
์ง„์งœ ํ…œํ”Œ๋ฆฟ ์ˆ˜์ค€์œผ๋กœ ์™ธ์›Œ์•ผ ํ•˜๋Š” ์ฝ”๋“œ๋ž˜์š”...

BFS โ€” ๊ฐ€๊นŒ์šด ๋ฐ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•˜๊ธฐ

BFS(Breadth-First Search)๋Š” ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด์—์š”.
์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”.

ํ•ต์‹ฌ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํ(Queue)์˜ˆ์š”. First In, First Out.
๋จผ์ € ์˜ˆ์•ฝํ•œ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๋‹ˆ๊นŒ, ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฐ€๊นŒ์šด ๋ฐ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธ์ด ๋˜๋Š” ๊ฑฐ์˜ˆ์š”.

๋™์ž‘ ๊ณผ์ •์„ ์ •๋ฆฌํ•˜๋ฉด:

  1. ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ํ‘œ์‹œ
  2. ํ์—์„œ ํ•˜๋‚˜ ๊บผ๋‚ด์„œ ๋ฐฉ๋ฌธ
  3. ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธ ์•ˆ ํ•œ ๊ฒƒ๋“ค์„ ํ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ ํ‘œ์‹œ
  4. ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ 2~3 ๋ฐ˜๋ณต
Queue<Integer> queue = new ArrayDeque<>();
boolean[] visited = new boolean[n];

queue.offer(start);
visited[start] = true;

while (!queue.isEmpty()) {
    int current = queue.poll();
    for (int next : graph.get(current)) {
        if (!visited[next]) {
            queue.offer(next);
            visited[next] = true;
        }
    }
}

๊ฐ•์‚ฌ๋‹˜์ด ์ด ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ํ•œ ์ค„ ์‹คํ–‰ํ•ด์ฃผ์‹œ๋ฉด์„œ "์˜ˆ์•ฝํ•˜๊ณ  โ†’ ๋ฐฉ๋ฌธํ•˜๊ณ  โ†’ ์˜ˆ์•ฝํ•˜๊ณ  โ†’ ๋ฐฉ๋ฌธํ•˜๊ณ " ์ด ํ๋ฆ„์„ ๋ฐ˜๋ณตํ•ด์„œ ๋ณด์—ฌ์ฃผ์…จ๋Š”๋ฐ, ์ด๊ฑฐ ๋ณด๋‹ˆ๊นŒ ์ง„์งœ ์ดํ•ด๊ฐ€ ๋์–ด์š”.


BFS์˜ ๊ฟ€๊ธฐ๋Šฅ: ์‹œ์ž‘ ๋…ธ๋“œ์—์„œ ๊ฐ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์–ด์š”!
ํ์— ๋…ธ๋“œ ๋ฒˆํ˜ธ๋งŒ ๋„ฃ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ฑฐ๋ฆฌ ์ •๋ณด๊นŒ์ง€ ๊ฐ™์ด ๋„ฃ์œผ๋ฉด ๋˜๊ฑฐ๋“ ์š”.

DFS

DFS(Depth-First Search)๋Š” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด์—์š”.
ํ•˜๋‚˜์˜ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•˜๋ฉด ๋๊นŒ์ง€ ํŒŒ๊ณ ๋“  ํ›„, ๋ง‰ํžˆ๋ฉด ๋˜๋Œ์•„์™€์„œ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”.

BFS๋Š” ํ๋ฅผ ์“ด๋‹ค๋ฉด, DFS๋Š” ์žฌ๊ท€ํ•จ์ˆ˜(๋˜๋Š” ์Šคํƒ)๋ฅผ ์จ์š”.
์™œ๋ƒ๋ฉด ๊นŠ์ด ๋“ค์–ด๊ฐ”๋‹ค๊ฐ€ ๋˜๋Œ์•„์˜ฌ ๋•Œ, "๋‚ด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์–ด๋””์„œ ์™”๋”๋ผ?"๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ฑฐ๋“ ์š”.
Last In, First Out โ€” ์Šคํƒ์˜ ํŠน์„ฑ์ด ๋”ฑ ๋งž๋Š” ๊ฑฐ์˜ˆ์š”.

์žฌ๊ท€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ง„์งœ ์งง์•„์š”:

void dfs(int current, List<List<Integer>> graph, boolean[] visited) {
    visited[current] = true;  // ๋ฐฉ๋ฌธ ๋จผ์ €!
    for (int next : graph.get(current)) {
        if (!visited[next]) {
            dfs(next, graph, visited);  // ์žฌ๊ท€ ํ˜ธ์ถœ
        }
    }
}

BFS๋ž‘ ๋น„๊ตํ•˜๋ฉด ๊ตฌ์กฐ ์ฐจ์ด๊ฐ€ ํ™• ๋ณด์ด์ฃ ?
BFS๋Š” "์˜ˆ์•ฝ โ†’ ๋ฐฉ๋ฌธ โ†’ ์˜ˆ์•ฝ โ†’ ๋ฐฉ๋ฌธ"์ด๊ณ ,
DFS๋Š” "๋ฐฉ๋ฌธ โ†’ ๋‹ค์Œ ๋…ธ๋“œ DFS ํ˜ธ์ถœ โ†’ ๋˜ ๋ฐฉ๋ฌธ โ†’ ๋˜ ํ˜ธ์ถœ"์ด์—์š”.

๊ฐ•์‚ฌ๋‹˜์ด DFS ๋™์ž‘ ๊ณผ์ •์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ถ”์ ํ•ด์ฃผ์…จ๋Š”๋ฐ,
์žฌ๊ท€ ํ˜ธ์ถœ์ด ์Œ“์˜€๋‹ค๊ฐ€ ํ•˜๋‚˜์”ฉ ๋น ์ ธ๋‚˜์˜ค๋Š” ๊ณผ์ •์ด ์ฒ˜์Œ์—” ์ •์‹ ์—†์—ˆ์–ด์š”.
๊ทผ๋ฐ "dfs(1) ํ–ˆ๋”๋‹ˆ ์•Œ์•„์„œ ๋ง‰ ๋ฐฉ๋ฌธํ•˜๊ณ  ๋‹ค ๋๋‚˜๊ณ  ๋Œ์•„์™”๋„ค. ์˜ค์ผ€์ด, ๊ทธ๋Ÿผ dfs(3) ํ•ด์•ผ์ง€" ์ด๋Ÿฐ ์‹์œผ๋กœ ์ดํ•ดํ•˜๋‹ˆ๊นŒ ์ข€ ๊ฐ์ด ์žกํ˜”์–ด์š”.


์žฌ๊ท€๊ฐ€ ์ฒ˜์Œ์ด์‹  ๋ถ„๋“ค์€ ์ง€๊ธˆ ๋‹น์žฅ ์ดํ•ด ์•ˆ ๋˜๋Š” ๊ฒŒ ์ •์ƒ์ด๋ž˜์š”.ใ…œใ…œใ…œ


์•„์ง 6์ผ์ด๋‚˜ ๋‚จ์•˜๋Š”๋ฐ ๋ฒŒ์จ ์ด ์ •๋„๋ฉด
๋‹ค์Œ ์ˆ˜์—…์ด ๊ธฐ๋Œ€๋˜๋ฉด์„œ๋„ ์‚ด์ง ๋ฌด์„ญ์Šต๋‹ˆ๋‹ค ๐Ÿ˜‚

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ๋˜ ๋งŒ๋‚˜์š”!