๐Ÿ“• Algorithm/Solved

[์•Œ๊ณ ๋ฆฌ์ฆ˜] Algorithm ์ด๋ž€? (์‹œ๊ฐ„ ๋ณต์žก๋„, ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•)

ํ•œ์ฝ”๋”ฉ 2020. 4. 18. 23:43
728x90
728x90
 

์•ˆ๋…•ํ•˜์„ธ์š”. ์ฝ”๋”ฉ ์ข€ ํ•ด๋ณธ ํ•œ์ฝ”๋”ฉ์ž…๋‹ˆ๋‹ค.

๋ณธ๊ต ๊ต๊ณผ๋ชฉ ์ค‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—…์„ ๋Œ€๋น„ํ•˜์—ฌ ์˜ˆ์Šต ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?

- ์–ด๋– ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๋™์ž‘๋“ค์˜ ๋ชจ์ž„

โ€‹

๊ทธ๋ ‡๋‹ค๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐฐ์šฐ๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋Š” ๋ฌธ์ œ ํ’€์ด๊ฐ€ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.


 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ ๋ฐฉ๋ฒ•

์ด๋Ÿฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€‹

1. Baekjoon

https://www.acmicpc.net/

2. Algospot

https://algospot.com

algospot.com :: ์•Œ๊ณ ์ŠคํŒŸ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

kriii ์ œ8ํšŒ ์ „๊ตญ ๋Œ€ํ•™์ƒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Œ€ํšŒ ๋™์•„๋ฆฌ ์—ฐํ•ฉ ๋Œ€ํšŒ(์ดํ•˜ UCPC2019)๊ฐ€ ์‚ผ์„ฑ์ „์ž์™€ ์‚ผ์„ฑ์†Œํ”„ํŠธ์›จ์–ด๋ฉค๋ฒ„์‹ญ ์˜ ํ›„์›์„ ๋ฐ›์•„ ์—ด๋ฆฝ๋‹ˆ๋‹ค!!!! ์˜ˆ์„ ์€ 7/27(ํ† )์— ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋ฉฐ, ๋ณธ์„ ์€ 8์›” ์ค‘ ํ† ์š”์ผ์— ์ง„ํ–‰ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. (์žฅ์†Œ๊ฐ€ ์•„์ง ํ™•์ •๋˜์ง€ ์•Š์•„ ํ›„์— ๊ณต์ง€ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. 1์ฃผ์ฐจ ๋˜๋Š” 2์ฃผ์ฐจ ํ† ์š”์ผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.) ๋ฐ˜๋“œ์‹œ 3์ธ 1ํŒ€์œผ๋กœ ์ž‘์„ฑํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ ์ฒญ์€ 6์›” 30(์ผ)๊นŒ์ง€ ๋ฐ›์„ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ๋Šฆ์ง€ ์•Š๊ฒŒ ์‹ ์ฒญํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์˜ˆ์„ ์€ ์˜จ๋ผ์ธ, ๋ณธ์„ ์€ ์˜จ์‚ฌ์ดํŠธ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ณธ์„ ์€ ํŒ€์› ๋ชจ๋‘๊ฐ€ ์‹œ๊ฐ„ ๋‚ด...

algospot.com

3. Codeforces

http://codeforces.com

 

4. Topcoder

http://topcoder.com

๋Œ€ํ‘œ์ ์œผ๋กœ ์ด๋Ÿฐ ์‚ฌ์ดํŠธ์—์„œ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์ฑ„์ ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๊ณต๋ถ€๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”?

โ€‹

- ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜์ž!

- ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์ž!

- ์–ด๋ ค์šด ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์งˆ๋ฌธํ•˜์ž!

- ์ •๋ง ๋ชป ํ’€ ๋•Œ๊นŒ์ง€ ํ•˜๊ณ  ์•ˆ๋˜๋ฉด ํ’€์ด๋ฅผ ๋ณด์ž!

โ€‹

ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ๋๊นŒ์ง€ ํ•ด๋ณด๊ณ , ์ • ์•ˆ๋˜๋ฉด ํ’€์ด๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ ์ƒ๊ฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์Šค์Šค๋กœ ์ƒ๊ฐํ•ด๋‚ด๋Š” ์‚ฌ๊ณ ๋ ฅ์„ ํ‚ค์šฐ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

โ€‹

์ฐธ๊ณ ๋กœ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•  ๋•Œ์—๋Š” C++๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. C, C++, JAVA ๋“ฑ ์—ฌ๋Ÿฌ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, C++์ด ์ข€ ๋” ๋Œ€์ค‘ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ›„์— ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ๊ตฌ๊ธ€๋ง ํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„ C++ ์†Œ์Šค์ฝ”๋“œ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด ํ’€์ด๋ฅผ ๋ณด๊ธฐ ํŽธํ•ฉ๋‹ˆ๋‹ค.

 


 

์‹œ๊ฐ„ ๋ณต์žก๋„, ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ• (Big O Notation)

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

์ฆ‰, ์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆด์ง€ ์˜ˆ์ƒ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘œ๊ธฐ๋ฒ•์€ ๋Œ€๋ฌธ์ž O๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ ๊ณผ๋ชฉ์„ ์ด์ˆ˜ํ•˜์…จ๋‹ค๋ฉด ๋ณต์žก๋„๋ฅผ ์ž˜ ์•„์‹ค ๊ฒ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์˜ˆ๋ฅผ ๋“ค์–ด๋ด…์‹œ๋‹ค.

int sum = 0; for (int i=1; i<=N; i++) sum += i;

์ž ์ด๋ ‡๊ฒŒ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ 1๋ถ€ํ„ฐ n๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ์†Œ์Šค์˜ ๋ณต์žก๋„๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

๋ฐ”๋กœ O(N)์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ ค ํ•  ๋•Œ ๊ตณ์ด ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด๋ ‡๊ฒŒ์š”.

int sum = 0; sum = N * (N+1) / 2;

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ด ์†Œ์Šค๋„ 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žก๋„๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

๋ฐ”๋กœ O(1)์ž…๋‹ˆ๋‹ค. ๋Œ€์ž… ์—ฐ์‚ฐ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

์ด๋ ‡๊ฒŒ, ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋„ ๋ณต์žก๋„๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ˆ™๋ จ๋„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

โ€‹

๋Œ€ํ‘œ์ ์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š”

โ€‹

O(1) < O(log N) < O(N) < O(N * log N) < O(N^2) < O(N^3) < O(2^N) < O(N!)

โ€‹

์ˆœ์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง‘๋‹ˆ๋‹ค.

โ€‹

๋Œ€์ฒด๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ์˜๋ฏธ๋Š” ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

โ€‹

O(1) : ๋‹จ์ˆœ ๊ณ„์‚ฐ ( a + b)

O(log N) : n ๊ฐœ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๊ณ„์† ๋ถ„ํ• 

O(N) : ๋ฐ˜๋ณต๋ฌธ

O(N * log N)

O(N^2) : 2์ค‘ ๋ฐ˜๋ณต๋ฌธ

O(N^3) : 3์ค‘ ๋ฐ˜๋ณต๋ฌธ

O(2^N) : ํฌ๊ธฐ๊ฐ€ n์ธ ์ง‘ํ•ฉ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ

O(N!) : ํฌ๊ธฐ๊ฐ€ n์ธ ์ˆœ์—ด

โ€‹

์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•  ์ค„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€?

๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์€ ๋‹จ์ˆœํžˆ ์‹œ๊ฐ„ ๋ณต์žก๋„์—์„œ ์ƒ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,

โ€‹

1) O(6 * N^2) => O(N^2)

2) O(2 * N^2 + 3 * N) => O(N^2)

3) O(3 *N + M) => O(N + M)

โ€‹

์ด๋ ‡๊ฒŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 1)์—์„œ๋Š” N^2์˜ ์ƒ์ˆ˜๋งŒ ์ œ๊ฑฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โ€‹

ํ•˜์ง€๋งŒ 2)์—์„œ๋Š” N^2์— ์ƒ์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ 3 * N๋„ ์ œ๊ฑฐํ•œ ์ด์œ ๋Š”

๋‘ ํ•ญ ์ค‘์— ๋” ํฐ ํ•ญ์„ ์‚ด๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€ ํ•ญ์€ ์ œ๊ฑฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

โ€‹

๊ฒŒ๋‹ค๊ฐ€, ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๋ณ€์ˆ˜๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ฉด ์ƒ์ˆ˜๋งŒ ์ œ๊ฑฐํ•˜๊ณ  ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅผ ๋•Œ์—๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•