Home /Algorithm/ ๐Ÿ’ฌ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜
Post
Cancel

/Algorithm/ ๐Ÿ’ฌ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜



์žฌ๊ท€๋ž€?


์–ด๋–ค ์‚ฌ๊ฑด์ด ์ž๊ธฐ ์ž์‹ ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๊ฑฐ๋‚˜ ๋˜๋Š” ์ž๊ธฐ ์ž์‹ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•˜๊ณ  ์žˆ์„ ๋•Œ
์ด๋ฅผ ์žฌ๊ท€์ (recursive)์ด๋ผ๊ณ  ํ•œ๋‹ค.



ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ•˜๊ธฐ(n!)


factorial

ํŒฉํ† ๋ฆฌ์–ผ(n!) โ€ข 0! = 1
โ€ข n > 0์ด๋ฉด n! = n ร— (n โ€” 1)!


1
2
10! = 10 x 9!
 9! =  9 x 8!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*
  ํŒฉํ† ๋ฆฌ์–ผ๊ฐ’์„ ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ•จ
 */
static int factorial(int n) {
  if (n > 0)
    return n * factorial(n - 1);
  else
    return 1; 
}

/*
  ํŒฉํ† ๋ฆฌ์–ผ๊ฐ’์„ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„
 */
return (n > 0) ? n * factorial(n - 1) : 1;


โ€˜ํŒฉํ† ๋ฆฌ์–ผ๊ฐ’์„ ๊ตฌํ•˜๋Š” ์˜ˆโ€™๋Š” ์žฌ๊ท€์˜ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ์—๋Š” ์ข‹์ง€๋งŒ
ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋‹ˆ๋‹ค.



์žฌ๊ท€ ํ˜ธ์ถœ


  • โ€˜์ž๊ธฐ ์ž์‹ ๊ณผ ๋˜‘๊ฐ™์€ ๋ฉ”์„œ๋“œโ€™๋ฅผ ํ˜ธ์ถœ

factorial ๋ฉ”์„œ๋“œ๋Š”
n - 1์˜ ํŒฉํ† ๋ฆฌ์–ผ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ factorial ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐฉ์‹์„ ์žฌ๊ท€ ํ˜ธ์ถœ(recursive call)์ด๋ผ๊ณ  ํ•œ๋‹ค.


์ง์ ‘์žฌ๊ท€์™€ ๊ฐ„์ ‘์žฌ๊ท€


  • ์ง์ ‘(direct) ์žฌ๊ท€
    ์ž์‹ ๊ณผ ๋™์ผํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ๋‹ค( a ).
  • ๊ฐ„์ ‘(indirect) ์žฌ๊ท€๋Š”
    ๋ฉ”์„œ๋“œ a๊ฐ€ ๋ฉ”์„œ๋“œ b๋ฅผ ํ˜ธ์ถœํ•˜๊ณ ,
    ๋‹ค์‹œ ๋ฉ”์„œ๋“œ b๊ฐ€ ๋ฉ”์„œ๋“œ a๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์กฐ( b ).

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-25 แ„‹แ…ฉแ„’แ…ฎ 12 00 50


1-3. ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•


๋‘ ์ •์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(greatest common divisor)๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ปดํ“จํ„ฐ๋ฅผ ์ด์šฉํ•ด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์ฐพ์„ ๋•Œ๋Š”, ์†Œ์ธ์ˆ˜๋ถ„ํ•ด๋ฅผ ํ•˜๊ธฐ ๋ณด๋‹ค๋Š”
์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์ด๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์ •ํ•ด์ง„ ์ ˆ์ฐจ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅด๋‹ค.


แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-25 แ„‹แ…ฉแ„’แ…ฎ 1 07 33


์ตœ๋Œ€๊ณต์•ฝ์ˆ˜: gcd(a,b)
์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜: lcm(a,b)
a, b๋กœ ๋‚˜๋ˆˆ ๋ชซ Q, ๋‚˜๋จธ์ง€ R
gcd(a,b) = gcd(b,R) ex) gcd (60, 24) = gcd (24 ,12) = 12
ใ€€
โ€ข y = 0์ผ ๋•Œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜: x
โ€ข y โ‰  0์ผ ๋•Œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜: gcd(y, x % y)
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-25 แ„‹แ…ฉแ„’แ…ฎ 1 13 00


1
2
3
4
5
6
7
// ์ •์ˆ˜ x, y์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜์—ฌ ๋ฐ˜ํ™˜
static int gcd(int x, int y) {
   if (y == 0)
     return x;
   else
    return gcd(y, x % y);
}



2. ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„์„



2-1. ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„์„ํ•˜๊ธฐ


ํ•˜ํ–ฅ์‹ ๋ถ„์„


โœ”๏ธ recur(3)์˜ ํ˜ธ์ถœ ..


์ƒํ–ฅ์‹ ๋ถ„์„


2-2. ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋น„์žฌ๊ท€์  ํ‘œํ˜„


๊ผฌ๋ฆฌ ์žฌ๊ท€์˜ ์ œ๊ฑฐ


์žฌ๊ท€์˜ ์ œ๊ฑฐ


2-3. ๋ฉ”๋ชจํ™”



3. ํ•˜๋…ธ์ด์˜ ํƒ‘




4. 8ํ€ธ ๋ฌธ์ œ



4-1. ํ€ธ ๋ฐฐ์น˜ํ•˜๊ธฐ


4-2. ๋ถ„๊ธฐ ์กฐ์ž‘


4-3. ๋ถ„๊ธฐ ํ•œ์ •๋ฒ•


4-4. 8ํ€ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ




(์ฐธ๊ณ )



๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์—ฌ๋Ÿฌ๊ธ€๊ณผ ์ฑ… ์ฝ์€ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ข‹์€ ๊ธ€๋กœ ์ €์˜ ๊ณต๋ถ€์— ๋„์›€์„ ์ฃผ์‹œ๋Š” ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

โœจTIL - ์˜ค๋Š˜ ํ•œ ์ผ

/database/ database ์˜ ์šฉ๋„,์—ญํ•