백준 1443 망가진 계산기 - JAVA

2025. 11. 10. 23:46·알고리즘/백준

1443 문제 링크


문제 설명


 

입출력


 

코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.*;
import java.util.*;
 
public class Main {
    private static int D, P;
    private static int max = -1;
    private static int limit = 0;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        D = Integer.parseInt(st.nextToken());
        P = Integer.parseInt(st.nextToken());
        limit = (int) Math.pow(10, D);
       dfs(1, 0, 2);
        bw.write(String.valueOf(max));
        bw.flush();
    }
    private static void dfs(int num, int depth, int start) {
        if (depth == P) {
            max = Math.max(max, num);
            return;
        }
        for (int i = start; i <= 9; i++) {
            if (num * i < limit) dfs(num * i, depth + 1, i);
        }
    }
}
Colored by Color Scripter
cs

 

알고리즘 설명


꼭 티어 때문에 어렵게 생각하게 되는 문제들이 있는 것 같습니다.

뭐... 문제를 푸는 방식은 크게 어렵지 않습니다. 다만, 저도 한 가지를 생각을 못하고 조금 헤맸네요.

 

이 문제는 정해진 자리수를 초과하지 않으면서 가장 큰 수를 만드는 것이 핵심입니다. 곱할 수는 2부터 9까지의 수인데, 단순히 순서를 바꾼 경우에도 결과가 같을 수 있습니다. 예를 들어

  1. 1 * 2 * 9...
  2. 1 * 9 * 2...

가 순서만 다르고 결과 값은 동일하기 때문에 순서를 고려하지 않고 중복 계산을 하지 않는 방법이 필요합니다. 따라서, 현재 선택된 수 보다 이상의 수만 곱해지도록 제한하면 순서만 다르고 결과 값은 같은 중복 계산을 방지할 수 있습니다.

 

코드 해석


P의 값이 최대 30까지 이지만 D의 값이 8까지이므로, 자료형도 int 범위내에서 충분한 것 같습니다.

먼저 limit 변수에 10^D 값을 저장하고, 2부터 9까지 반복문을 돌며 현재 숫자에 곱했을 때 limit을 넘지 않으면 백트래킹을 수행합니다.

 

이때, 백트래킹 내에서 다음 단계의 반복문 시작 값을 현재 곱한 숫자부터로 설정하여, 이전 단계에서 곱해진 수보다 작은 수로 중복 계산하지 않도록 합니다.

'알고리즘 > 백준' 카테고리의 다른 글

백준 2146 다리 만들기 - JAVA  (0) 2025.12.06
백준 1761 정점들의 거리 - JAVA  (0) 2025.11.22
백준 2636 치즈 - JAVA  (1) 2025.10.29
백준 1019 책 페이지 - JAVA  (0) 2025.10.20
백준 1941 소문난 칠공주 - JAVA  (0) 2025.10.16
'알고리즘/백준' 카테고리의 다른 글
  • 백준 2146 다리 만들기 - JAVA
  • 백준 1761 정점들의 거리 - JAVA
  • 백준 2636 치즈 - JAVA
  • 백준 1019 책 페이지 - JAVA
BIS's tech Blog
BIS's tech Blog
Welcome to Kanghyun's tech blog :)
  • BIS's tech Blog
    벼익숙의 기술 블로그
    BIS's tech Blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (74) N
      • 알고리즘 (59) N
        • 백준 (50) N
        • 프로그래머스 (9)
      • CS 스터디 (14)
        • CS - JAVA (11)
        • CS - DB (3)
      • 도서 (1)
      • 프로젝트 (0)
  • 블로그 메뉴

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

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    너비 우선 탐색
    재귀
    깊이 우선 탐색
    dp
    CS
    자료구조
    java
    완전탐색
    DFS
    Top-Down
    동적 계획
    Baekjoon
    기술질문
    프로그래머스
    백준
    Lv2
    백트래킹
    브루트포스
    알고리즘 고득점 kit
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BIS's tech Blog
백준 1443 망가진 계산기 - JAVA
상단으로

티스토리툴바