[백준] 2231

ninano05·2026년 4월 1일

부분합

  • 즉 각자리 숫자가 a, b, c라면
  • N=abc+a+b+c가 주어졌을 때 만족하는 가장 작은 abc를 구해야 한다.
  • 완전 탐색하기
  • N이 1일 때부터 가정하며 나머지 연산으로 각 자릿수를 구해서 가장 작은 abc를 구한다.
  • 보완)))
  • N이 가장 작아지려면, 결국 각 자리숫자가 커야한다.
  • 즉 a, b, c가 999인 경우 N은 작아진다.
  • 가장 작은 N의 값을 1이 아닌 a, b, c가 각각 9일 때를 가정하고 반복문을 실행한다.

모든 경우 돌아보며, 최소값 업데이트

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        int min = Integer.MAX_VALUE;

        for(int i=1; i<=N; i++) {
            int sum = i;
            int m = i;
            while(m != 0) {
                sum += m%10;
                m = m/10;
            }
            if(sum == N) {
                if(i < min) {
                    min = i;
                }
            }
        }
        // 생성자가 없었을 경우
        if(min == Integer.MAX_VALUE) bw.write("0");
        else bw.write(min+"");
        bw.flush();
        bw.close();
        br.close();
    }
}

범위를 줄여서 탐색

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        int min = 0; // 조건 만족 안하는 경우 초기값임(만족할 때만 값 업데이트)
        int start = Math.max(0, N-String.valueOf(N).length()*9); // N의 자릿수가 999같이 가장 큰 경우에, 생성자가 작아지기 때문

        for(int i=start; i<=N; i++) {
            int sum = i;
            int temp = i;

            while(temp != 0) {
                sum += temp%10;
                temp = temp/10;
            }
            if(sum == N) { // 조건을 만족하면 저장하고 빠져 나가기
                min = i;
                break;
            }
        }
        bw.write(min+"");
        bw.flush();
        bw.close();
        br.close();
    }
}
profile
초보 개발자

0개의 댓글