๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฉด์ ‘ ์งˆ๋ฌธ

๐Ÿ’ก ๋™์  ๊ณ„ํš๋ฒ•(DP, Dynamic Programming)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด, ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๋™์  ๊ณ„ํš๋ฒ•์—์„œ๋Š” ์–ด๋–ค ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์–ด, ๋‹ต์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณ„์‚ฐํ•˜๋Š” ๋Œ€์‹  ํ•œ ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•˜๊ณ 

๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์žฌํ™œ์šฉํ•˜๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)๊ธฐ๋ฒ•์œผ๋กœ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โ€ป ๋ฉ”๋ชจ์ด์ œ์ด์…˜ : ๋™์ผํ•œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๋•Œ, ์ด์ „์— ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋™์ผํ•œ ๊ณ„์‚ฐ์˜ ๋ฐ˜๋ณต ์ˆ˜ํ–‰์„ ์ œ๊ฑฐํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ 


๐Ÿ’ก ๋™์  ๊ณ„ํš๋ฒ•(DP, Dynamic Programming)์ด ๊ฐ–๋Š” 2๊ฐ€์ง€ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

1. ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„(์ž‘์€) ๋ฌธ์ œ  

์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ๋Š” ๋‚˜๋ˆ ์ง„ ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ๋กœ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์ค‘๋ณต ๊ณ„์‚ฐ์„ ์—†์•ฑ๋‹ˆ๋‹ค.

2. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ

์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค๋Š” ๊ฒƒ์€ ์ „์ฒด ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๊ฐ€ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋“ค๋กœ์จ ๊ตฌ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๐Ÿ’ก ๋ฒ„๋ธ” ์ •๋ ฌ(Bubble Sort)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ฒ„๋ธ” ์ •๋ ฌ๋Š” ์„œ๋กœ ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ n-1๋ฒˆ ์ธ๋ฑ์Šค๊นŒ์ง€ n๋ฒˆ๊นŒ์ง€์˜ ๋ชจ๋“  ์ธ๋ฑ์Šค๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2)์ž…๋‹ˆ๋‹ค.

 

 


๐Ÿ’ก ์„ ํƒ ์ •๋ ฌ(Selection Sort)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์„ ํƒ ์ •๋ ฌ์€ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ๋‘๋ฒˆ์งธ ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๊ฐ’๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๋น„๊ตํ•˜์—ฌ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„ ์ฒซ ๋ฒˆ์งธ์— ๋†“๊ณ ,

๋‘ ๋ฒˆ์งธ ๊ฐ’์„ ์„ธ ๋ฒˆ์งธ ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๊ฐ’๊นŒ์ง€ ๋น„๊ตํ•˜์—ฌ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„ ๋‘ ๋ฒˆ์งธ ์œ„์น˜์— ๋†“๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^2)์ž…๋‹ˆ๋‹ค.

 

 


๐Ÿ’ก ์‚ฝ์ž… ์ •๋ ฌ(Injection Sort)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์‚ฝ์ž… ์ •๋ ฌ์€ ๋‘ ๋ฒˆ์งธ ๊ฐ’๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ทธ ์•ž์— ์กด์žฌํ•˜๋Š” ์›์†Œ๋“ค๊ณผ ๋น„๊ตํ•˜์—ฌ ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ฐพ์•„ ์‚ฝ์ž…ํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^2)์ด๋ฉฐ, Best Case ์˜ ๊ฒฝ์šฐ O(n)๊นŒ์ง€ ๋†’์•„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


๐Ÿ’ก ํž™ ์ •๋ ฌ(Heap Sort)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํž™ ์ •๋ ฌ์€ ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด ์ตœ๋Œ“๊ฐ’ ๋˜๋Š” ์ตœ์†Ÿ๊ฐ’๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

ํž™ ์ •๋ ฌ์ด ๊ฐ€์žฅ ์œ ์šฉํ•œ ๊ฒฝ์šฐ๋Š” ์ „์ฒด๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ€์žฅ ํฐ ๊ฐ’ ๋ช‡๊ฐœ๋งŒ์„ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(nlogn)์ž…๋‹ˆ๋‹ค.

 

 


๐Ÿ’ก ๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ํฌ๊ธฐ๊ฐ€ 1์ธ ๋ฐฐ์—ด๋กœ ๋ถ„ํ• ํ•˜๊ณ  ํ•ฉ๋ณ‘ํ•˜๋ฉด์„œ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ถ„ํ• /์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(nlogn)์ž…๋‹ˆ๋‹ค.

 

 


๐Ÿ’ก ํ€ต ์ •๋ ฌ(Quick Sort)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํ€ต ์ •๋ ฌ์€ ๋น ๋ฅธ ์ •๋ ฌ ์†๋„๋ฅผ ์ž๋ž‘ํ•˜๋Š” ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜๋กœ ํ”ผ๋ด‡์„ ์„ค์ •ํ•˜๊ณ  ํ”ผ๋ด‡๋ณด๋‹ค ํฐ ๊ฐ’๊ณผ ์ž‘์€ ๊ฐ’์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ •๋ ฌ ํ•ฉ๋‹ˆ๋‹ค.

๋ณ‘ํ•ฉ์ •๋ ฌ๊ณผ ๋‹ฌ๋ฆฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋น„๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(nlogn)์ด๋ฉฐ worst case ๊ฒฝ์šฐ O(n^2)๊นŒ์ง€ ๋‚˜๋น ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


๐Ÿ’ก ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋น„๊ต ํ‘œ

 

 


๐Ÿ’ก Big-O ํ‘œ๊ธฐ๋ฒ•์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ ํฌ๊ธฐ ์ˆœ์„œ๋ฅผ ๋งํ•ด์ฃผ์„ธ์š”.

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

 

 


๐Ÿ’ก ํ—ˆํ”„๋งŒ ์ฝ”๋”ฉ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

  • ์ ‘๋‘๋ถ€ ์ฝ”๋“œ : ๊ฐ ๋ฌธ์ž์— ๋ถ€์—ฌ๋œ ์ด์ง„ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ์ด์ง„ ์ฝ”๋“œ์˜ ์ ‘๋‘๋ถ€๊ฐ€ ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ (์ฆ‰, ๊ฒน์น˜์ง€ ์•Š๋„๋ก ์ด์ง„ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ)
  • ์ตœ์  ์ฝ”๋“œ : ์ธ์ฝ”๋”ฉ๋œ ๋ฉ”์‹œ์ง€์˜ ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์ฝ”๋“œ

๐Ÿ’ก ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ•จ์ˆ˜๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ๋˜ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

์ž๊ธฐ์ž์‹ ์„ ๊ณ„์†ํ•ด์„œ ํ˜ธ์ถœํ•˜์—ฌ ๋์—†์ด ๋ฐ˜๋ณต๋˜๊ฒŒ ๋˜๋ฏ€๋กœ ๋ฐ˜๋ณต์„ ์ค‘๋‹จํ•  ์กฐ๊ฑด์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ N๋ฒˆ์งธ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด ๊ฐ๊ฐ ์žฌ๊ท€์™€ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์†์ฝ”๋”ฉ(๋˜๋Š” ์ˆ˜๋„์ฝ”๋”ฉ) ํ•ด์ฃผ์„ธ์š”.

 
private static int recursiveFibonacci(int index) {
 
if (index <= 2){
 
return 1;
 
}
 
return recursiveFibonacci(index - 1) + recursiveFibonacci(index - 2);
 
}
 
 
 
private static int loopFibonacci(int index) {
 
int answer = 1;
 
int before = 1;
 
int temp;
 
for (int i = 2; i < index; i++) {
 
temp = answer;
 
answer += before;
 
before = temp;
 
}
 
return answer;
 
}

๐Ÿ’ก ํŒฉํ† ๋ฆฌ์–ผ์˜ N๋ฒˆ์งธ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•ด ๊ฐ๊ฐ ์žฌ๊ท€์™€ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์†์ฝ”๋”ฉ(๋˜๋Š” ์ˆ˜๋„์ฝ”๋”ฉ) ํ•ด์ฃผ์„ธ์š”.

 
private static int recursiveFactorial(int num) {
 
if(num > 1) {
 
return recursiveFactorial(num -1) * num;
 
}
 
return 1;
 
}
 
 
 
private static int loopFactorial(int num) {
 
int answer = 1;
 
for(int i = 2; i <= num; i++) {
 
answer *= i;
 
}
 
return answer;
 
}

๐Ÿ’ก ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ Tip

Translate this article: How to Rock an Algorithms Interview

1. ์น ํŒ์— ๊ธ€์“ฐ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

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

2. ๊ทธ๊ฒƒ์„ ํ†ตํ•ด ์ด์•ผ๊ธฐํ•˜์‹ญ์‹œ์˜ค.

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

3. ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•˜์„ธ์š”.

๋•Œ๋กœ๋Š” ๋ฌธ์ œ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜๊ณ  ํ•ด๊ฒฐ์ฑ…์ด ๋‹น์‹ ์—๊ฒŒ ๋‚˜์˜ฌ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค (์ด๊ฒƒ์ด ์ƒํ–ฅ์‹ ์ ‘๊ทผ๋ฒ• ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ๋„ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ๊ฐ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹น์‹  ์•ž์˜ ๋ฌธ์ œ์— ์ ์šฉ๋˜๋Š”์ง€๋ฅผ ์งˆ๋ฌธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํ•˜ํ–ฅ์‹ ์ ‘๊ทผ๋ฒ•). ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฐธ์กฐ ํ”„๋ ˆ์ž„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ข…์ข… ์ฆ‰๊ฐ์ ์ธ ํ†ต์ฐฐ๋ ฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ฉด์ ‘์—์„œ ์š”๊ตฌํ•˜๋Š” ๋ฌธ์ œ์˜ ์ ˆ๋ฐ˜ ์ด์ƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • Sorting (plus searching / binary search)
  • Divide and Conquer
  • Dynamic Programming / Memoization
  • Greediness
  • Recursion
  • Algorithms associated with a specific data structure (which brings us to our fourth suggestion...)

4. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค.

์ƒ์œ„ 10 ๊ฐœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์‹ค์ œ ์„ธ๊ณ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ 99 %๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ? ๋•Œ๋กœ๋Š” ์ตœ์ ์˜ ์†”๋ฃจ์…˜์ด ๋ธ”๋ฃธ ํ•„ํ„ฐ ๋˜๋Š” ์ ‘๋ฏธ์–ด ํŠธ๋ฆฌ๋ฅผ ํ•„์š”๋กœํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฌป์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์กฐ์ฐจ๋„ ํ›จ์”ฌ ๋” ์ผ์ƒ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์ ์˜ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ž์ฃผ ํ‘œ์‹œ ๋  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Array
  • Stack / Queue
  • HashSet / HashMap / HashTable / Dictionary
  • Tree / Binary tree
  • Heap
  • Graph

5. ์ด์ „์— ๋ณด์•˜๋˜ ๊ด€๋ จ ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค.

์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์ œ์‹œํ•œ ๋ฌธ์ œ๋Š” ์ด์ „์— ๋ณด์•˜๋˜ ๋ฌธ์ œ์ด๊ฑฐ๋‚˜ ์ ์–ด๋„ ์กฐ๊ธˆ์€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด๊ณ  ๋ฌธ์ œ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์–ด๋–ป๊ฒŒ ์ ์‘ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ๋ฌธ์ œ๊ฐ€ ์ œ๊ธฐ๋˜๋Š” ํ˜•ํƒœ๋กœ ๋„˜์–ด์ง€์ง€๋Š” ๋งˆ์‹ญ์‹œ์˜ค. ํ•ต์‹ฌ ๊ณผ์ œ๋กœ ๋„˜์–ด ๊ฐ€์„œ ๊ณผ๊ฑฐ์— ํ•ด๊ฒฐ ํ•œ ๊ฒƒ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

6. ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ•ดํ•˜์—ฌ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.

ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ ๋˜๋Š” ๋ฌธ์ œ์˜ ๋‹จ์ˆœํ™” ๋œ ๋ฒ„์ „์„ ํ•ด๊ฒฐํ•˜์‹ญ์‹œ์˜ค. ์ฝ”๋„ˆ ์ผ€์ด์Šค๋ฅผ ๋ณด๋Š” ๊ฒƒ์€ ๋ฌธ์ œ์˜ ๋ณต์žก์„ฑ๊ณผ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํฐ ๋ฌธ์ œ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ์ถ•์†Œํ•˜๋ฉด ์ž‘์€ ๋ถ€๋ถ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ „์ฒด ๋ฒ”์œ„๊นŒ์ง€ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์€ ๋ฌธ์ œ์˜ ๊ตฌ์„ฑ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋ณด๋Š” ๊ฒƒ๋„ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7. ๋˜๋Œ์•„ ์˜ค๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

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


๐Ÿ’ก ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์ „๋žต์  ์ ‘๊ทผ

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์˜ ๋ชฉ์ 

  1. ๋ฌธ์ œ ํ•ด๊ฒฐ ์—ฌ๋ถ€
  2. ์˜ˆ์™ธ ์ƒํ™ฉ๊ณผ ๊ฒฝ๊ณ„๊ฐ’ ์ฒ˜๋ฆฌ
  3. ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์ค‘๋ณต ์ œ๊ฑฐ ์—ฌ๋ถ€ ๋“ฑ ์ฝ”๋“œ ํ’ˆ์งˆ
  4. ์–ธ์–ด ์ดํ•ด๋„
  5. ํšจ์œจ์„ฑ

๊ถ๊ทน์ ์œผ๋กœ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•จ์ด๋ฉฐ ์ด๋Š” '์–ด๋–ป๊ฒŒ ์ด ๋ฌธ์ œ๋ฅผ ์ฐฝ์˜์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ๊ฐ€'๋ฅผ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•จ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ ‘๊ทผํ•˜๊ธฐ

  1. ๋ฌธ์ œ๋ฅผ ๊ณต๊ฒฉ์ ์œผ๋กœ ๋ฐ›์•„๋“ค์ด๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์š”๊ตฌํ•˜์—ฌ, ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š”๊ฒŒ ์šฐ์„ ์ด๋‹ค.
  2. ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ์ต์ˆ™ํ•œ ์šฉ์–ด๋กœ ์žฌ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ์ถ”์ƒํ™”๋ผ๊ณ  ํ•œ๋‹ค.
  3. ์ถ”์ƒํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ง€ ๊ณ„ํš์„ ์„ธ์šด๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉํ•  ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ•œ๋‹ค.
  4. ์„ธ์šด ๊ณ„ํš์— ๋Œ€ํ•ด ๊ฒ€์ฆ์„ ํ•ด๋ณธ๋‹ค. ์ˆ˜๋„ ์ฝ”๋“œ ์ž‘์„ฑ๋„ ํ•ด๋‹น๋  ์ˆ˜ ์žˆ๊ณ  ๋ฌธ์ œ ์ถœ์ œ์ž์—๊ฒŒ ์˜๊ฒฌ์„ ๋ฌผ์–ด๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค.
  5. ์„ธ์šด ๊ณ„ํš์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณธ๋‹ค. ํ•ด๊ฒฐ์ด ์•ˆ ๋œ๋‹ค๋ฉด ์•ž์„  ๊ณผ์ •์„ ๋˜์งš์–ด๋ณธ๋‹ค.

์ƒ๊ฐํ•  ๋•Œ

  • ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ์ƒ๊ฐํ•ด๋ณธ๋‹ค.
  • ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ„๋‹ค.
  • ์ž‘์€ ๊ฐ’์„ ์ƒ๊ฐํ•ด๋ณธ๋‹ค.
  • ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณธ๋‹ค.
  • ์ˆ˜์‹์œผ๋กœ ํ‘œํ˜„ํ•ด๋ณธ๋‹ค.
  • ์ˆœ์„œ๋ฅผ ๊ฐ•์ œํ•ด๋ณธ๋‹ค.
  • ๋’ค์—์„œ๋ถ€ํ„ฐ ์ƒ๊ฐํ•ด๋ณธ๋‹ค.

์ถœ์ฒ˜: https://dev-coco.tistory.com/160?category=1056309 [์Šฌ๊ธฐ๋กœ์šด ๊ฐœ๋ฐœ์ƒํ™œ:ํ‹ฐ์Šคํ† ๋ฆฌ]