Contents

νŒ©ν† λ¦¬μ–Ό (with.Java)

   Feb 13, 2024     2 min read

β€œνŒ©ν† λ¦¬μ–Όβ€ λ¬Έμ œμ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έ κΈ€μž…λ‹ˆλ‹€.

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©°, ν’€μ—ˆλ˜ λ¬Έμ œμ— λŒ€ν•œ νšŒκ³ μ™€ λ‹€λ₯Έ 풀이 방법을 μ•Œμ•„λ³΄λ©°, μ•Œμ•„κ°€κ³ μž ν•©λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

문제

iνŒ©ν† λ¦¬μ–Ό (i!)은 1λΆ€ν„° iκΉŒμ§€ μ •μˆ˜μ˜ 곱을 μ˜λ―Έν•©λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄ 5! = 5 _ 4 _ 3 _ 2 _ 1 = 120 μž…λ‹ˆλ‹€. μ •μˆ˜ n이 μ£Όμ–΄μ§ˆ λ•Œ λ‹€μŒ 쑰건을 λ§Œμ‘±ν•˜λŠ” κ°€μž₯ 큰 μ •μˆ˜ iλ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

  • i! ≀ n

μ œν•œμ‚¬ν•­

  • 0 < n ≀ 3,628,800

μž…μΆœλ ₯ μ˜ˆμ‹œ

nresult
362880010
73

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ 풀이

class Solution {
    public int solution(int n) {
        int answer = 0;
        int temp = 1;
        for(int i = 2; i <= 10; i++){
            for(int j = i; j >= 2; j--){
                temp *= j;
            }
            if(temp == n){
                answer = i;
                return answer;
            } else if(temp > n){
                answer = i - 1;
                return answer;
            } else {
                temp = 1;
            }
        }
        return answer;
    }
}

풀이 μ„€λͺ…

solution(int n): 주어진 μ •μˆ˜ n을 νŒ©ν† λ¦¬μ–Όλ‘œ ν‘œν˜„ν•  수 μžˆλŠ” μ΅œμ†Œν•œμ˜ 숫자 개수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

for 문을 μ΄μš©ν•˜μ—¬ 2λΆ€ν„° 10κΉŒμ§€μ˜ μˆ«μžμ— λŒ€ν•΄ νŒ©ν† λ¦¬μ–Όμ„ κ³„μ‚°ν•©λ‹ˆλ‹€.

λ‚΄λΆ€ for 문을 톡해 ν˜„μž¬ μˆ«μžλΆ€ν„° 2κΉŒμ§€μ˜ νŒ©ν† λ¦¬μ–Όμ„ κ³„μ‚°ν•˜κ³ , 이λ₯Ό temp에 μ €μž₯ν•©λ‹ˆλ‹€.

κ³„μ‚°ν•œ νŒ©ν† λ¦¬μ–Όμ΄ nκ³Ό μΌμΉ˜ν•˜λ©΄ ν•΄λ‹Ή 숫자λ₯Ό 결과둜 λ°˜ν™˜ν•©λ‹ˆλ‹€.

νŒ©ν† λ¦¬μ–Όμ΄ n보닀 크면 직전 μˆ«μžκ°€ μ΅œμ†Œ κ°œμˆ˜μ΄λ―€λ‘œ 결과둜 λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ½”λ“œ μž₯점

  • κ°„λ‹¨ν•œ κ΅¬ν˜„: 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 ν•„μš”ν•œ κ΅¬ν˜„μ΄ κ°„λ‹¨ν•˜λ‹€.
  • 직관적인 둜직: 주어진 쑰건을 순차적으둜 κ²€μ‚¬ν•˜μ—¬ 직관적인 λ‘œμ§μ„ κ°–μΆ”κ³  μžˆλ‹€.

μ½”λ“œ 단점

  • νŠΉμ • λ²”μœ„μ—λ§Œ 적용 κ°€λŠ₯: ν˜„μž¬λŠ” 2λΆ€ν„° 10κΉŒμ§€μ˜ μˆ«μžμ— λŒ€ν•΄μ„œλ§Œ νŒ©ν† λ¦¬μ–Όμ„ κ³„μ‚°ν•˜κ³  μžˆμ–΄, 이 λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λ©΄ μ •ν™•ν•œ κ²°κ³Όλ₯Ό 얻을 수 μ—†λ‹€.