๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Coding Test ์ฝ”๋”ฉํ…Œ์ŠคํŠธ

Do it ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ•˜๋ฃจ์ฝ”๋”ฉ 8์žฅ ๊ทธ๋ž˜ํ”„ ์ด๋ก 

by ๋น„์†Œ์•ผ 2022. 11. 18.
728x90

# 20 ๊ทธ๋ž˜ํ”„

 

๊ทธ๋ž˜ํ”„๋Š” ๋…ธ๋“œ์™€ ์—ฃ์ง€๋กœ ๊ตฌ์„ฑ๋œ ์ง‘ํ•ฉ์ด๋‹ค.

๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋‹จ์œ„

์—์ง€๋Š” ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐ

ํŠธ๋ฆฌ๋„ ๊ทธ๋ž˜ํ”„์˜ ์ผ์ข…

 

์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ

๊ทธ๋ž˜ํ”„์˜ ์‹ธ์ดํด์ด ์ƒ์„ฑ๋˜๋Š”์ง€ ํŒ๋ณ„

 

์œ„์ƒ์ •๋ ฌ

์กฐ๊ฑด ์‹ธ์ดํดX, ๋ฐฉํ–ฅO

์ „ํ›„ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์„ ํ˜•์œผ๋กœ ์ •๋ ฌ

ex) ์ˆ˜๊ฐ•์‹ ์ฒญ ์ˆ˜1 -> ์ˆ˜2

๊ฒŒ์ž„ ๋นŒ๋“œ์˜ค๋”

์ฃผ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์œ ์ผํ•˜์ง€ ์•Š๋‹ค.

 

์ตœ๋‹จ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

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

์กฐ๊ฑด ์‹œ์ž‘์ O, ์Œ์ˆ˜๊ฐ„์„ X

 

๋ฒจ๋งŒํฌ๋“œ

์กฐ๊ฑด ์‹œ์ž‘์ O, ์Œ์ˆ˜๊ฐ„์„  ok

์Œ์ˆ˜ ์‹ธ์ดํด์ด ์žˆ๋Š”์ง€? ์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ฐ€ ์Œ์˜ ๋ฌดํ•œ๋Œ€๋กœ ๊ฐ„๋‹ค.

ex) ์‹œ๊ฐ„ ์—ฌํ–‰, ์›œํ™€

 

ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ

์กฐ๊ฑด ์‹œ์ž‘์ X

๋ชจ๋“  ๋…ธ๋“œ ์Œ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ

๋‹จ์  ์‹œ๊ฐ„๋ณต์žก๋„ ๋‚˜์˜๋‹ค. // ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ž‘์„ ๋•Œ ๋˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ์Œ์„ ๊ตฌํ• ๋•Œ ์‚ฌ์šฉ

 

์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ MST

๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ์ตœ์†Œ์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์‹ธ์ดํด์ด ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ ํ™œ์šฉ

 

# 21 ๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„

3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

์—์ง€ ์ค‘์‹ฌ, ๋…ธ๋“œ ์ค‘์‹ฌ ํ‘œํ˜„์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

 

1. ์—์ง€ ๋ฆฌ์ŠคํŠธ

๊ฐ€์ค‘์น˜X ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ 2์—ด ๋ฐฐ์—ด A[N][2] S, E ex) 1 2 ์€ 1->2

๊ฐ€์ค‘์น˜O                    3์—ด ๋ฐฐ์—ด A[N][3] S, E, V ex) 1 2 8 ์€ 1-8->2

 

๋‹จ์ 

ํŠน์ • ๋…ธ๋“œ์™€ ๊ด€๋ จ์žˆ๋Š” ์—์ง€ ํƒ์ƒ‰ ์–ด๋ ค์›€, ๋…ธ๋“œ ์ค‘์‹ฌ์ด ์•„๋‹ˆ๋ผ ์—์ง€ ์ค‘์‹ฌ์ด๋ฏ€๋กœ

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋…ธ๋“œ ์ค‘์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉX // ๋ฒจ๋งŒ ํฌ๋“œ, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—์ง€ ์ค‘์‹ฌ์ด์—ฌ์„œ ์—ฌ๊ธฐ์— ์‚ฌ์šฉ

 

2. ์ธ์ ‘ ํ–‰๋ ฌ

2์ฐจ์› ๋ฐฐ์—ด, ๋…ธ๋“œ๊ฐ€ 5๊ฐœ์ธ ๊ทธ๋ž˜ํ”„๋Š” 5 X 5๋กœ ํ‘œํ˜„

 

๊ฐ€์ค‘์น˜X ๊ทธ๋ž˜ํ”„

 

                    ๋„์ฐฉ๋…ธ๋“œ4

์ถœ๋ฐœ ๋…ธ๋“œ3           1

 

๊ฐ€์ค‘์น˜O ๊ทธ๋ž˜ํ”„

                            15

 

๋‹จ์ 

๋…ธ๋“œ์™€ ๊ด€๋ จ๋˜์–ด ์žˆ๋Š” ์—์ง€๋ฅผ ํƒ์ƒ‰ํ•˜๋ ค๋ฉด N๋ฒˆ ์ ‘๊ทผ ํ•„์š” // ๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํ–‰(start ๋…ธ๋“œ)๊นŒ์ง€๋Š” ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ A[2][N]

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

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„, ๊ณต๊ฐ„๋ณต์žก๋„ ๋ชจ๋‘ ๋‚˜์˜๋‹ค.

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ธ์ ‘ํ–‰๋ ฌ์€ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉ์—ฌ๋ถ€ ํŒ๋‹จ

 

3. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

๋…ธ๋“œ ์ค‘์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งŽ๊ณ , ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ํ‘ธ๋Š” ๊ฒƒ๋„ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ํ’€ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”ํ…Œ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ

 

๊ฐ€์ค‘์น˜X ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„

ArrayList<Integer>[N] // ๋ฐฐ์—ด

A[3].add(4) // ์‹œ์ž‘ ๋…ธ๋“œ ์ข…๋ฃŒ ๋…ธ๋“œ

 

๊ฐ€์ค‘์น˜O ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„

ArrayList<Node>[N]

์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค

class Node {

int E;

int V;

}

A[3].add(new Node(4, 13)) // ์‹œ์ž‘ ๋…ธ๋“œ ์ข…๋ฃŒ ๋…ธ๋“œ ๊ฐ€์ค‘์น˜

 

๊ตฌํ˜„์€ ๋ณต์žกํ•˜์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋…ธ๋“œ์™€ ์—ฐ๊ด€ ๋˜์–ด ์žˆ๋Š” ์—์ง€๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์‹œ๊ฐ„์€ ๋งค์šฐ ๋›ฐ์–ด๋‚˜๋ฉฐ // ๋ฐฐ์—ด์ด๋ฏ€๋กœ ์ธ๋ฑ์‹ฑํ•˜์—ฌ ์ ‘๊ทผ ์†๋„ ๋น ๋ฆ„,

๊ฐ€๋ณ€์ ์ด์—ฌ์„œ ๊ณต๊ฐ„ ํšจ์œจ์ , ๊ณต๊ฐ„๋ณต์žก๋„ ์ž‘๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ์—๋Ÿฌ ๋ฐœ์ƒX 

 

#22 ์œ ๋‹ˆ์˜จํŒŒ์ธ๋“œ

์œ ๋‹ˆ์˜จ ์—ฐ์‚ฐ ํŠน์ • ๋…ธ๋“œ 2๊ฐœ๋ฅผ ์—ฐ๊ฒฐํ•ด 1๊ฐœ์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ฌถ์Œ

ํŒŒ์ธ๋“œ ์—ฐ์‚ฐ 2๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด ์žˆ๋Š”์ง€ ํŒ๋ณ„ // ์ž์‹ ์˜ ๋Œ€ํ‘œ ๋…ธ๋“œ๋ฅผ ์ฐพ์Œ

 

๊ณผ์ •

1. ์ดˆ๊ธฐํ™”

// ๋Œ€ํ‘œ ๋…ธ๋“œ ์ €์žฅ ๋ฐฐ์—ด

1์ฐจ์› ๋ฐฐ์—ด์— ์ž์‹ ์˜ ์ธ๋ฑ์Šค ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” // ์ฒ˜์Œ์—๋Š” ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ž์‹ ์ด ๋Œ€ํ‘œ ๋…ธ๋“œ์ด๋‹ค.

 

2. union ์—ฐ์‚ฐ // ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์€ ๋…ธ๋“œ๋ผ๋ฆฌ ์—ฐ๊ฒฐํ•œ๋‹ค๋Š” ๋œป

๊ณผ์ •

1. ์ž‘์€ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค๋ฉด // ๊ธฐ์ค€ ์„ ํƒ

union(1, 4) // 1๊ณผ 4๋ฅผ ์—ฐ๊ฒฐ, ์ž‘์€ ๊ฒƒ ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด 4์— 1๋Œ€์ž…

union(5, 6) // 6์— 5๋Œ€์ž…

 

union ์—ฐ์‚ฐ์€ ํ•ญ์ƒ ๋Œ€ํ‘œ ๋…ธ๋“œ๋ผ๋ฆฌ ์—ฐ๊ฒฐํ•œ๋‹ค.

union(4, 6)

find(4) // 4์˜ ๋Œ€ํ‘œ ๋…ธ๋“œ ์ฐพ์•„ 1

find(6) // 6์˜ ๋Œ€ํ‘œ ๋…ธ๋“œ ์ฐพ์•„ 5

๋Œ€ํ‘œ๋…ธ๋“œ (1, 5) ์ฐพ์•„์„œ ์—ฐ๊ฒฐ // ์ฆ‰, 5์— 1 ๋Œ€์ž…

4์™€ 6์„ union ํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ 1๊ณผ 5๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ฒฐ๊ณผ์ ์œผ๋กœ 4์™€ 6์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค.

 

3. find ์—ฐ์‚ฐ์€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€(ํ•œ ์ง‘ํ•ฉ์ธ์ง€)์—ฌ๋ถ€๋ฅผ ํŒ๋‹จ

find์—ฐ์‚ฐ //์ธ๋ฑ์Šค์™€ ์ €์žฅ๋œ ๊ฐ’ ๋น„๊ต !=์ด๋ฉด ์ €์žฅ๋œ ๊ฐ’ ์ธ๋ฑ์Šค๋กœ ์ด๋™ํ•ด์„œ ==

 

๊ณผ์ •

1. ๋…ธ๋“œ์— index์™€ value ๋น„๊ต

2. != value์— ํ•ด๋‹น๋˜๋Š” index(๋…ธ๋“œ)๋กœ ์ด๋™

3. == ์ผ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต // ์ฆ‰, ๋Œ€ํ‘œ๋…ธ๋“œ ์ฐพ์„๋•Œ๊นŒ์ง€, ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„

4. ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋น ์ ธ๋‚˜์˜ค๋ฉด์„œ ๊ฑฐ์น˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋Œ€ํ‘œ ๋…ธ๋“œ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ

 

find ์—ฐ์‚ฐ์€ ๋‹จ์ˆœํžˆ ๋Œ€ํ‘œ๋…ธ๋“œ๋งŒ ์ฐพ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ทธ๋ž˜ํ”„๋ฅผ ์ •๋ˆํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐœ์„ 

๊ฒฝ๋กœ ํ•จ์ถ• ๋˜๋ฉฐ ํ•œ๋ฒˆ์˜ ์ด๋™์œผ๋กœ ๋Œ€ํ‘œ๋…ธ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์„œ ์‹œ๊ฐ„๋ณต์žก๋„ ๊ฐœ์„  // ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ์•ผ ๋Œ€ํ‘œ ๋…ธ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ์—์„œ ๋” ์งง์€ ๊ฒฝ๋กœ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•จ์œผ๋กœ์จ

 

# 23 ์œ„์ƒ์ก๋ ฌ

์กฐ๊ฑด ์‹ธ์ดํดX, ๋ฐฉํ–ฅO

๋…ธ๋“œ๋ฅผ ์„ ํ˜•์œผ๋กœ ์ •๋ ฌ

์ฃผ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์œ ์ผํ•˜์ง€ ์•Š๋‹ค.

 

๊ธฐ๋Šฅ ๋…ธ๋“œ๊ฐ„์˜ ์ˆœ์„œ ๊ฒฐ์ •, ํŠน์ง• ์กฐ๊ฑด ์‹ธ์ดํด X, ๋ฐฉํ–ฅ O, ์‹œ๊ฐ„๋ณต์žก๋„ O(V+E) // ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜+ ์—์ง€์˜ ๊ฐœ์ˆ˜

์œ„์ƒ ์ •๋ ฌ์˜ ํ•ต์‹ฌ์€ ์ง„์ž… ์ฐจ์ˆ˜ // ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—์ง€์˜ ๊ฐœ์ˆ˜

 

1. ์ดˆ๊ธฐํ™” // ์ธ์ ‘๋ฆฌ์ŠคํŠธ ArrayList ๋ฐฐ์—ด๋กœ ์›๋ณธ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„, ์ง„์ž… ์ฐจ์ˆ˜ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” // 1์ด 2, 3์„ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ D[2]++; D[3]++;

2. ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ ์„ ํƒํ•˜์—ฌ ์ •๋ ฌ ๋ฐฐ์—ด์— ์ €์žฅ

3. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์—์„œ ์ €์žฅ๋œ ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ๋“ค์˜ ์ง„์ž… ์ฐจ์ˆ˜ -1

4. 2, 3๋ฐ˜๋ณต ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ •๋ ฌ ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

 

# 24 ๋‹ค์ต์ŠคํŠธ๋ผ

 

728x90