© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 5692 - 팩토리얼 진법

2025-08-09
BOJ
브론즈 III
cpp
원본 문제 보기
수학
사칙연산

문제

BOJ 5692 - 팩토리얼 진법

팩토리얼 진법으로 표현된 수를 10진법으로 변환하라. 팩토리얼 진법에서 i번째 자릿수(오른쪽부터)는 i!의 가중치를 가진다.

입력

여러 팩토리얼 진법 수가 주어지며, 0이면 종료한다.

출력

각 수를 10진법으로 출력한다.

예제

입력출력
719 053

풀이

각 자릿수에 해당하는 팩토리얼 가중치를 곱하여 합산한다.

  1. 팩토리얼 값 배열을 미리 계산한다 (1!, 2!, 3!, ...)
  2. 입력 수의 각 자릿수(오른쪽부터)에 대응하는 팩토리얼을 곱한다
  3. 곱한 값의 합이 10진수 결과이다

핵심 아이디어: 팩토리얼 진법은 i번째 자릿수의 값이 d * i!이므로, 위치별 가중치 합산으로 변환한다.

코드

#include <iostream>
 
using namespace std;
 
int N;
int arr[6];
 
bool init()
{
 
  cin >> N;
  return N;
}
 
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  for (int i = 0; i < 5; i++)
  {
    if (i == 0)
      arr[i] = 1;
    else
      arr[i] = arr[i - 1] * (i + 1);
  }
  while (init())
  {
    int temp = N;
    int j = 0;
    int sum = 0;
    while ((temp % 10) || (temp / 10))
    {
      sum += (temp % 10) * arr[j++];
      temp /= 10;
    }
    cout << sum << "\n";
  }
 
  return 0;
}

복잡도

  • 시간: O(자릿수)
  • 공간: O(1)