팩토리얼 진법
문제 설명
상근이는 보통 사람들이 사는 것과는 조금 다른 삶을 사는 사람이다. 상근이는 이런 사람들의 시선이 부담스럽기 때문에, 자신만의 숫자를 개발하기로 했다. 바로 그 이름은 팩토리얼 진법이다. 팩토리얼 진법은 각 자리에 올 수 있는 숫자는 0부터 9까지로 10진법과 거의 비슷하다. 하지만, 읽는 법은 조금 다르다. 팩토리얼 진법에서는 i번 자리의 값을 ai×i!로 계산한다. 즉, 팩토리얼 진법에서 719는 10진법에서 53과 같다. 그 이유는 7×3! + 1×2! + 9×1! = 53이기 때문이다.
팩토리얼 진법으로 작성한 숫자가 주어졌을 때, 10진법으로 읽은 값을 구하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 최대 5자리인 팩토리얼 진법 숫자가 주어진다. 입력의 마지막 줄에는 0이 하나 주어진다.
출력
각 테스트 케이스에 대해서, 입력으로 주어진 팩토리얼 진법 숫자를 10진법으로 읽은 값을 출력한다.
Python 코드
from sys import stdin # readline을 사용하기 위해 import
from math import factorial # factorial을 사용하기 위해 import
while True: # 0을 입력할 때까지 반복
number = stdin.readline().rstrip() # 팩토리얼 진법 숫자 입력
number_len = len(number) # 입력한 팩토리얼 진법 숫자의 길이를 저장하는 변수 선언
decimal_number = 0 # 팩토리얼 진법 숫자를 10진법으로 읽은 값을 저장할 변수 선언
if number == '0': # 입력한 팩토리얼 진법 숫자가 0이라면
break # 반복문 탈출
for i in range(number_len): # 팩토리얼 진법 숫자의 길이만큼 반복
decimal_number += int(number[i]) * factorial(number_len -i)
# 팩토리얼 진법 숫자에서 i번 자리의 값을 10진법으로 계산해
# decimal_number에 더한다.
print(decimal_number) # 팩토리얼 진법 숫자를 10진법 숫자로 읽은 값을 출력
* 참고 링크 : https://brightnightsky77.tistory.com/313
C++ 코드
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
int getFac(int num){
int tmp = 1;
for(int i = 1; i <= num; i++)
tmp *= i;
return tmp;
}
int getFacNum(int num) {
int tmp = num, sum = 0, cnt = 1;
while(tmp){
sum += tmp % 10 * getFac(cnt++);
tmp /= 10;
}
return sum;
}
int main(){
fastio;
while(1){
int n, ans = 0;
cin >> n;
if(!n) break;
cout << getFacNum(n) << '\n';
}
}
* 참고 링크 : https://codecollector.tistory.com/1336
출처
'코딩테스트 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 2606번 바이러스 (0) | 2022.02.14 |
---|---|
[백준 알고리즘] 1260번 DFS와 BFS (0) | 2022.02.14 |
[백준 알고리즘] 2745번 진법 변환 (0) | 2022.02.08 |
[백준 알고리즘] 10816번 숫자 카드 2 (0) | 2022.01.25 |
[백준 알고리즘] 2557번 Hello World (0) | 2021.12.28 |