[백준] 2057번 : 팩토리얼 분해 (JAVA)

2026. 3. 3. 12:15·코테(Solved.ac + Programmers)
728x90

📌

https://www.acmicpc.net/problem/2057


📌 문제 개요

주어진 정수 N을 서로 다른 팩토리얼들의 합으로 표현할 수 있는지 판별하는 문제

- 같은 팩토리얼은 중복 사용 불가.

40321 = 8! + 1!

📌 접근 방법

팩토리얼은 매우 빠르게 증가한다.

20!까지만 계산하면 충분 팩토리얼 개수가 적기 때문에 큰 값부터 차례대로 빼는 그리디 전략 사용 가능.

1! = 1
2! = 2
3! = 6
...
20! ≈ 2.4e18

📌 핵심 아이디어

  1. 1! ~ 20! 미리 계산
  2. 20!부터 1!까지 내려오면서
  3. N보다 작거나 같으면 한 번만 빼기
  4. 최종적으로 N이 0이면 YES

팩토리얼은 배수 구조이기 때문에 큰 것부터 빼도 항상 안전하다.


📌 전체 코드

package no_2057;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class No2057 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        long N = Long.parseLong(br.readLine());

        long[] fact = new long[21];
        fact[0] = 1;

        for (int i = 1; i <= 20; i++) {
            fact[i] = fact[i - 1] * i;
        }

        for (int i = 20; i >= 0; i--) {
            if (N >= fact[i]) {
                N -= fact[i];
            }
        }

        if (N == 0) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }
}

📌 정리

  • 팩토리얼 개수는 최대 20개
  • 그리디로 해결 가능
  • 시간복잡도는 사실상 O(1)
  • long 타입 필수
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

[백준] 2018번 : 수들의 합 5 (JAVA)  (0) 2026.03.05
[백준] 2747번 : 피보나치 수 (JAVA)  (0) 2026.03.04
[백준] 1418번 : K-세준수 (JAVA)  (0) 2026.03.02
[백준] 10870번 : 피보나치 수 5 (JAVA)  (0) 2026.03.01
[백준] 11653번 : 소인수분해 (JAVA)  (0) 2026.02.26
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • [백준] 2018번 : 수들의 합 5 (JAVA)
  • [백준] 2747번 : 피보나치 수 (JAVA)
  • [백준] 1418번 : K-세준수 (JAVA)
  • [백준] 10870번 : 피보나치 수 5 (JAVA)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    springboot
    dp
    정렬
    level0
    java
    자바
    level1
    코딩테스트
    정보처리기사 실기 기출문제
    브루트포스
    알고리즘
    정처기오답노트
    Level2
    백준
    기출문제
    문자열
    백엔드개발자
    구현
    배열
    정보처리기사
    완전탐색
    피보나치
    정처기
    실기
    정처기실기
    자료구조
    시뮬레이션
    수학
    solved.ac
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
[백준] 2057번 : 팩토리얼 분해 (JAVA)
상단으로

티스토리툴바