코딩테스트/Programmers

[Programmers] 입문) 팩토리얼 (역추적)

HONGGG 2023. 7. 1. 23:51

 

처음 문제를 제대로 이해하지 못해 팩토리얼을 구하는 문제라고 읽었다.

알고보니 주어진 자연수 n이 가질 수 있는 가장 큰 팩토리얼 숫자를 찾는 것이 목표였다..

 

가장 우선적으로 팩토리얼 문제를 풀며 항상 사용했던 재귀함수와 팩토리얼을 반대로 찾아내는 함수를 생성하자

 

팩토리얼을 추적하기 위해는 3가지가 필요하다.

1. 목표 수

2. 현재 팩토리얼 결과 수

3. 현재 팩토리얼

 

solution(목표수){
	return 팩토리얼 (목표값, 현재 팩토리얼 결과 값, 팩토리얼값) 재귀
}
    
int 팩토리얼(목표값, 현재 팩토리얼 결과 값, 팩토리얼값){
	if (결과값이 목표값보다 큰가?)
        결과값이 더 높다면 이전 팩토리얼값를 반환
    
    팩토리얼 값 증가
    
    return 팩토리얼(목표값, 증가한 팩토리얼 값을 토대로 계산된 현재 팩토리얼 결과값, 증가한 팩토리얼값);
}
using System;

public class Solution {
    public int solution(int n) {
        return FactorialRewind(n);
    }
    
    private int FactorialRewind(int target, int number = 1, int counter = 1){
        if (target < number) return --counter;
        
         ++counter;
        
        return FactorialRewind(target, number * counter, counter);
    }
}