๐Ÿ Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[Programmers] ํŒฉํ† ๋ฆฌ์–ผ(์ž๋ฐ”)

Dhey 2023. 3. 29. 23:58
๋ฐ˜์‘ํ˜•

โžฐ๋ฌธ์ œ

iํŒฉํ† ๋ฆฌ์–ผ (i!)์€ 1๋ถ€ํ„ฐ i๊นŒ์ง€ ์ •์ˆ˜์˜ ๊ณฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 5! = 5 * 4 * 3 * 2 * 1 = 120 ์ž…๋‹ˆ๋‹ค. ์ •์ˆ˜ n์ด ์ฃผ์–ด์งˆ ๋•Œ ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ •์ˆ˜ i๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

 →  i! ≤ n

 

 


์ œํ•œ์‚ฌํ•ญ

   -  0 < n ≤ 3,628,800

 


์ž…์ถœ๋ ฅ ์˜ˆ

n result
3628800 10
7 3

 


์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

  ์ž…์ถœ๋ ฅ ์˜ˆ #1

  • 10! = 3,628,800์ž…๋‹ˆ๋‹ค. n์ด 3628800์ด๋ฏ€๋กœ ์ตœ๋Œ€ ํŒฉํ† ๋ฆฌ์–ผ์ธ 10์„ return ํ•ฉ๋‹ˆ๋‹ค.

  ์ž…์ถœ๋ ฅ ์˜ˆ #2

  • 3! = 6, 4! = 24์ž…๋‹ˆ๋‹ค. n์ด 7์ด๋ฏ€๋กœ, 7 ์ดํ•˜์˜ ์ตœ๋Œ€ ํŒฉํ† ๋ฆฌ์–ผ์ธ 3์„ return ํ•ฉ๋‹ˆ๋‹ค.

 

 


 

๐Ÿ’กํ’€์ด

โญfor๋ฌธ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ

class Solution {
    public int solution(int n) {
        int answer = 0;
        int factorial = 1;
        
        //n์˜ ๋ฒ”์œ„๊ฐ’์ด ์ •ํ•ด์ ธ ์žˆ์œผ๋ฏ€๋กœ ์ตœ๋Œ€ ํŒฉํ† ๋ฆฌ์–ผ์€ 10
        for(int i=1; i<=10; i++){
            factorial *= i;
            
            if(factorial == n){
                answer = i;
                break;
            }else if(n < factorial){
                answer = (i-1);
                break;
            }
        }
        return answer;
    }
}

n์˜ ๋ฒ”์œ„ ๊ฐ’์€ 0 < n < 3,628,800์œผ๋กœ ์ •ํ•ด์ ธ์žˆ๊ณ , ์ž…์ถœ๋ ฅ ์˜ˆ๋ฅผ ํ†ตํ•ด ์ตœ๋Œ€ result ๊ฐ’์€ 10์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ด๋ฅผ ํ†ตํ•ด for๋ฌธ์„ 1~10๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ, 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ„์–ด ์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด answer๊ฐ’์„ ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค.

   1) 1~i๊นŒ์ง€ ๊ณฑํ•œ ๊ฐ’(=factorial)์ด n๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ

   2) 1~i๊นŒ์ง€ ๊ณฑํ•œ ๊ฐ’(=factorial)์ด n๋ณด๋‹ค ํด ๊ฒฝ์šฐ

   3) ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ( i๊ฐ€ 10์ธ ๊ฒฝ์šฐ)

 

** 1, 2 ์กฐ๊ฑด๋ฌธ ์•ˆ์—๋Š” break;๋ฅผ ์‚ฌ์šฉํ•ด ๋”์ด์ƒ ๋ฐ˜๋ณต๋˜์ง€ ์•Š๋„๋ก ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

 

 

โญwhile๋ฌธ์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ

class Solution {
    public int solution(int n) {
        int answer = 0;
        int factorial = 1;
        int index = 1;
         while(factorial < n){
             factorial *= index;
            
             if(factorial < n){
                  index++;
              }else if(factorial == n){
                  answer = index;
              }else if(n < factorial){
                 answer = (index-1);
             } 
         }
        return answer;
    }
}

 

 

 

 

๋ฐ˜์‘ํ˜•