
[백준] 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 반복 인덱스를 이용해 자리 위치를 바로 계산하고 더해주었다.
'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글
[백준] 2447 별 찍기 - 10 (java) (0) | 2022.03.13 |
---|---|
[백준] 3079 입국 심사 (java) (0) | 2022.02.18 |
[백준] 10816 - 숫자 카드 2 (java) (0) | 2022.01.24 |