[백준] 5692 팩토리얼 진법 (java)

zl존석동

·

2022. 3. 5. 09:18

 

백준 5692번 팩토리얼 진법 자바 풀이


 

 

 

 

 

5692번: 팩토리얼 진법

상근이는 보통 사람들이 사는 것과는 조금 다른 삶을 사는 사람이다. 상근이는 이런 사람들의 시선이 부담스럽기 때문에, 자신만의 숫자를 개발하기로 했다. 바로 그 이름은 팩토리얼 진법이다.

www.acmicpc.net

 

문제 요약

 

숫자가 주어진다.

 

주어진 숫자의 자리에 있는 한자리의 숫자 * 자리위치!  를 모두 더하라

 

예를 들어 주어진 숫자가 34

 

3 * 2! + 4 * 1! 을 구하는 것이다.

 

 

 

 

나의 풀이 과정

 

1. 한 자리의 숫자에 대한 팩토리얼을 구하는 함수를 만든다.

 

2. 주어진 숫자를 통해 자리 정보 +  그 자리의 한 자리 숫자 를 얻는다.

 

3. 계산하여 모두 더한다.

 

 

자바 풀이 코드

 

import java.util.Scanner;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            String inputNumber = sc.nextLine();
            if ("0".equals(inputNumber)) {
                break;
            }
            System.out.println(toFactorialInt(inputNumber));
        }
    }

    private static int toFactorialInt(String str) {
        AtomicInteger atomicInteger = new AtomicInteger();
        return str.chars()
                  .map(val -> (val - 48) * factorial(str.length() - atomicInteger.getAndIncrement()))
                  .sum();
    }

    private static int factorial(int num) {
        if (num <= 1) {
            return 1;
        }
        return factorial(num - 1) * num;
    }
}

 

 

풀이과정의 1번 대로 입력 숫자에 대해 팩토리얼을 구하는 재귀 메소드를 먼저 만들었다.

 

그리고 위의 2,3번 과정은 어차피 숫자라 해도 입력을 문자열로 받은 걸 이용해서

 

한 글자인 character 배열로 만들고 주어진 문자열(숫자) 길이와 문자 map 반복 인덱스를 이용해 자리 위치를 바로 계산하고 더해주었다.