본문 바로가기
personal 과제/ouguro's personal

백준 27433번: 팩토리얼 2

by Ouguro 2024. 10. 1.

문제

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성

 

입력

첫째 줄에 정수 N(0 ≤ N ≤ 20)이 주어진다

10

출력

첫째 줄에 N!을 출력한다

(N! = 1부터 N까지의 숫자의 곱)

3628800

코드

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		long num = sc.nextInt();
		System.out.println(facto(num));
	}
	
	public static long facto(long n) {
		
		if (n == 0) {
			return 1;
		}else {
			long sum = facto(n - 1);
			return n*sum;
		}
	}
}

풀이

재귀함수를 이용하는 문제

재귀함수는 하나의 함수에서 자신을 다시 호출하여 작업을 수행하는 방식으로

주어진 문제를 푸는 방법이다

public static long facto(long n) {
		
		if (n == 0) {
			return 1;
		}else {
			long sum = facto(n - 1);
			return n*sum;
		}
	}

위 코드를 보면 facto 함수 내에서 다시 facto 함수를 호출하는것을 볼 수 있다

이런식으로 자기자신을 참조하다가 조건문에서 탈출하면 다음 return 문을 실행한다

예시) N이 10일때 실행 순서

1. facto 함수의 인자 int n에 num값이 들어간다
2. 함수 내부의 로직이 실행된다 (위 코드에서는 조건문)
3. 조건에 따라 sum 변수에 facto(n -1)의 값을 넣어준다
   (10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1의 순으로 값이 들어간다)
4. return n*sum이 실행됨에 따라 역순으로 수가 곱해진다
   (1*1, 2*1, 2*3, 6*4, 24*5 ....)

 

주의사항

잘보면 N을 10만 주었는데도 결과값이 상당히 높게 나온다

만약 99 같은 숫자를 입력하면 int 형식으로는 표현할 수 없는 값이 나올것이다

결과 값이 높을것으로 예상될때는 long 타입의 자료형을 사용하는게 좋다

'personal 과제 > ouguro's personal' 카테고리의 다른 글

백준 1438번 영화감독 숌  (1) 2024.10.10
백준 1417번 국회의원 선거  (1) 2024.10.10