๐Ÿ“ Coding Test Study

[์ž๋ฃŒ๊ตฌ์กฐ&์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ž˜ํ”„?

ibelieveinme 2021. 4. 13. 03:21
728x90

 

 

๊ทธ๋ž˜ํ”„๋ž€?

: ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…

: ์ •์ (Node, Vertex), ๊ฐ„์„ (Edge)๋กœ ๊ตฌ์„ฑ -> ๊ฐ„์„ ์ด๋ž€? ์ •์ ๊ณผ์˜ ๊ด€๊ณ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

: G=(V,E)๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

 

 

<๊ทธ๋ž˜ํ”„์™€ ๊ด€๋ จ๋œ ์šฉ์–ด ์ •๋ฆฌ>

1. ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ๋กœ๋ž€?

: ์‹œ์ž‘์ ->๋„์ฐฉ์ ์œผ๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์˜ ์—ฐ์†

ex) ์œ„์˜ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณด๋ฉด ์ •์  2์—์„œ 1๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ์ด๋‹ค.

     2 -> 1

     2 -> 3 -> 1

 

2. ์‚ฌ์ดํด์ด๋ž€?

: ์‹œ์ž‘์ ๊ณผ ๋„์ฐฉ์ ์ด ๋ชจ๋‘ ๊ฐ™์€ ๊ฒฝ์šฐ. ์ฆ‰, ์ถœ๋ฐœํ•œ ์ •์ ์œผ๋กœ ๋‹ค์‹œ ๋˜๋Œ์•„์˜ค๋Š” ๊ฒฝ์šฐ

 

2-1. ๋‹จ์ˆœ ๊ฒฝ๋กœ์™€ ๋‹จ์ˆœ ์‚ฌ์ดํด?

๋‹จ์ˆœํ•˜๋‹ค๋Š” ๊ฑด, ๊ฒฝ๋กœ/์‚ฌ์ดํด์—์„œ ๊ฐ™์€ ์ •์ ์„ ๋‘ ๋ฒˆ ์ด์ƒ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š” ๊ฒฝ๋กœ/์‚ฌ์ดํด์„ ์˜๋ฏธํ•œ๋‹ค.

์ฆ‰, ํŠน๋ณ„ํ•œ ๋ง์ด ์—†์œผ๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ˆœ ๊ฒฝ๋กœ/์‚ฌ์ดํด์„ ์˜๋ฏธํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์ž.

 

3. ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„?

: ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด A -> B ๋กœ ๊ฐ„์„  ๋ฐฉํ–ฅ์ด ์žˆ๋‹ค๋ฉด B -> A๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

4. ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„?

: ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด A -> B ๊ฐ€ ๋ฐฉํ–ฅ์—†์ด ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, B -> A๋กœ๋„ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์ฃผ์˜ํ•  ์ ) ์ด๋ ‡๊ฒŒ, ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„๋Š” A -> B์˜ ๊ฒฝ์šฐ์™€ B ->A ๊ฒฝ์šฐ์˜ ๊ฐ„์„  2๊ฐœ๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

5. ๊ฐ€์ค‘์น˜?

: ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

  => A์—์„œ B๋กœ ์ด๋™ํ•˜๋Š” ๊ฑฐ๋ฆฌ, ์ด๋™ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„, ์ด๋™ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋น„์šฉ ๋“ฑ

 

6. ์ฐจ์ˆ˜(Degree)?

: ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜

: ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ In-degree(์ •์ ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„ ), Out-degree(์ •์ ์—์„œ ๋‚˜๊ฐ€๋Š” ๊ฐ„์„ )๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ฐจ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.

 

 

<๊ทธ๋ž˜ํ”„๋ฅผ ์ฝ”๋“œ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•ด์•ผ ํ• ๊นŒ?>

1. ์–ด๋–ค ์ •์ x์™€ ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์„ ํšจ์œจ์ ์œผ๋กœ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ๊ทธ๋ž˜ํ”„๋ฅผ ์ €์žฅํ•ด์•ผ ํ• ๊นŒ?

 

1) ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ์ €์žฅํ•˜๊ธฐ(2์ฐจ์›ํ–‰๋ ฌ/2์ฐจ์› ๋ฐฐ์—ด ์‚ฌ์šฉ)

A[i][j] = 1 // i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์ด ์žˆ๋Š” ๊ฒฝ์šฐ

A[i][j] = 0 // i์—์„œ j๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์ด ์—†๋Š” ๊ฒฝ์šฐ

๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์„ ๋•, A[i][j] = w(๊ฐ€์ค‘์น˜) ํ˜•ํƒœ๋กœ ์ €์žฅ

 

2) ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•˜๊ธฐ(๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉ)

A[i] = j์™€ ๊ฐ™์ด ์ •์  i์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ •์ (j)์„ ๋ฆฌ์ŠคํŠธ์— ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•˜์ž

A[1] = 2 5 // ์ •์ 1๊ณผ ์—ฐ๊ฒฐ๋œ ์ •์ ์€ 2, 5 ์ด๋‹ค.

A[2] = 1 3 4 5 // ์ •์  2์™€ ์—ฐ๊ฒฐ๋œ ์ •์ ์€ 1, 3, 4, 5 ์ด๋‹ค.

A[3] = 2 4

A[4] = 3 5 2 6

A[5] = 1 2 4

A[6] = 4

 

์ด ๊ฒฝ์šฐ๋Š” ๊ฐ ๋ฆฌ์ŠคํŠธ๋งˆ๋‹ค ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ๋™์  ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค. vector(C++) ๋‚˜ arrayList(JAVA) ์‚ฌ์šฉ

 

๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์„ ๋•, ์•„๋ž˜์ฒ˜๋Ÿผ A[i] = (j, w) ํ˜•ํƒœ๋กœ ๊ฐ€์ค‘์น˜(w)๋„ ํ•จ๊ป˜ ์ €์žฅํ•˜์ž

A[1] = (2,2) (5,7) // 1์—์„œ 2๋กœ ๊ฐ€๋Š”๋ฐ ๊ฐ€์ค‘์น˜๊ฐ€ 2๋‹ค. 1์—์„œ 5๋กœ ๊ฐ€๋Š”๋ฐ ๊ฐ€์ค‘์น˜๊ฐ€ 7์ด๋‹ค.

A[2] = (1,2) (3,2) (4,3) (5,1)

A[3] = (2,2) (4,1)

A[4] = (3,1) (5,7) (2,3) (6,7)

A[5] = (1,7) (2,1) (4,7)

A[6] = (4,7)

 

2. ๊ทธ๋ž˜ํ”„์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ์•Œ์•„๋ณด์ž~!

1) ์ธ์ ‘ ํ–‰๋ ฌ O(V^2) // 2์ฐจ์› ๋ฐฐ์—ด/ํ–‰๋ ฌ์ด๋ฏ€๋กœ ์ •์ ์˜ ์ œ๊ณฑ๋งŒํผ

2) ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ O(E) // ๊ฐ„์„ ์„ ์ €์žฅํ•˜๋‹ˆ๊นŒ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋งŒํผ

 

์ฆ‰, E << V^2 ์ด๋ฏ€๋กœ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋” ์ข‹์€ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

ํ•˜์ง€๋งŒ, ๋‹ค์Œ 2๊ฐ€์ง€ ๊ฒฝ์šฐ์—๋Š” ์ธ์ ‘ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋” ์ข‹์„ ์ˆ˜ ์žˆ๋‹ค.

 

โ‘  u, v๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ, u -> v๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์ด ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ์ฐพ์„ ๋•Œ

์ธ์ ‘ ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ A[u][v] = 1์ธ์ง€๋งŒ ์ฐพ์œผ๋ฉด ๋˜๋ฏ€๋กœ ์ธ์ ‘ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ, A[u] ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ u์˜ ์ฐจ์ˆ˜๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค.

 

โ‘ก ๋‘ ์ •์  u, v๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ, v,u์˜ ์ •์ ์ด ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ์ฐพ์„ ๋•Œ

์ธ์ ‘ ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ A[v][u] = 1์ธ์ง€๋งŒ ์ฐพ์œผ๋ฉด ๋˜๋ฏ€๋กœ O(1)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ์—๋Š” A[v] ๋ฅผ ๋ชจ๋‘ ํƒ์ƒ‰ํ•ด์„œ u๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋ฏ€๋กœ v์˜ ์ฐจ์ˆ˜๋งŒํผ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

 

โ‘ข ์™„์ „ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ

์ธ์ ‘๋ฆฌ์ŠคํŠธ์™€ ๊ณต๊ฐ„๋ณต์žก๋„๊ฐ€ ๊ฐ™์œผ๋ฏ€๋กœ ์ธ์ ‘ํ–‰๋ ฌ๋กœ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๊ณต๊ฐ„๋ณต์žก๋„๋„ ๋™์ผํ•  ๊ฒƒ์ด๋‹ค.

์ฐธ๊ณ ) ์™„์ „ ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋Š”E = V(V-1)/2 ์ด๋‹ค.

 

 

๊ทธ๋ž˜๋„ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ›จ์”ฌ ๋งŽ์œผ๋‹ˆ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŽ์ด ์—ฐ์Šตํ•˜์žใ…Žใ…Ž

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ •์  X์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๊ฐ„์„ ์„ ์ฐพ๋Š” ๊ฒฝ์šฐ,

์ธ์ ‘ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ,  A[x][1] ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(v)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ, ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ๋งŒ ์ €์žฅํ•˜๋ฏ€๋กœ O(์ฐจ์ˆ˜)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. 

๊ทธ๋ž˜์„œ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ๊ฐ€ ์‹œ๊ฐ„์ด ๋” ๋น ๋ฅด๋‹ค! ๊ณต๊ฐ„๋„ ์ ๊ฒŒ ๋“ ๋‹ค! ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

 

<๊ธฐํƒ€ ๊ฟ€ํŒ>

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๊นŒ๋‹ค๋กœ์šด๋ฐ, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?

๊ฐ„์„  ๋ฆฌ์ŠคํŠธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋™์ ํ• ๋‹น ์—†์ด ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์™€ ๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ๋‚ด๋ณด์ž!

 

๊ฐ„์„  ๋ฆฌ์ŠคํŠธ?

: ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ 1์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

 

๊ทธ๋ž˜์„œ ๊ฐ„์„  ๋ฆฌ์ŠคํŠธ๋กœ ์–ด๋–ป๊ฒŒ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌํ˜„ํ•ด?

1) E๋ผ๋Š” ๋ฐฐ์—ด์— ๊ฐ„์„ ์„ ๋ชจ๋‘ ์ €์žฅํ•œ๋‹ค.

2) ์ €์žฅ๋œ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

 

3) ๊ฐ ๊ฐ„์„ ์˜ ์•ž ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.

i 0 1 2 3 4 5 6
cnt[i] 0 2 4 2 4 3 1

4) cnt[i] ๋ฐฐ์—ด์„ ์•ž์—์„œ๋ถ€ํ„ฐ ๋ˆ„์ ํ•ด ๋‚˜๊ฐ€๋ฉฐ ์ €์žฅํ•œ๋‹ค.

i 0 1 2 3 4 5 6
cnt[i] 0 2 6 8 12 15 16

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด,

 

3์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ •์ ์€ 6๋ฒˆ์งธ๋ถ€ํ„ฐ 8๋ฒˆ์งธ ์ „๊นŒ์ง€ (E[6] ~ E[7])

4๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ •์ ์€ 8๋ฒˆ์งธ~12๋ฒˆ์งธ ์ „๊นŒ์ง€ (E[8] ~ E[11])

5๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ •์ ์€ 12๋ฒˆ์งธ~15๋ฒˆ์งธ ์ „๊นŒ์ง€ (E[12] ~ E[14]) ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿผ ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋“ค์„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŸ์ง•~?

 

 

<๊ด€๋ จ๋ฌธ์ œ>

 

13023๋ฒˆ: ABCDE

๋ฌธ์ œ์˜ ์กฐ๊ฑด์— ๋งž๋Š” A, B, C, D, E๊ฐ€ ์กด์žฌํ•˜๋ฉด 1์„ ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

 

728x90