1 분 소요



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



🔍 문제 풀이

문제 도식화

이런 자릿수 연산자로 분해하는 문제가 아직 낯설다..🥲

assets/images/2025/4673.jpg


연산자 분해 방법

[방법1] 연산자 활용 📌

%/로 자리수를 추출해서 합산

    // n의 각 자릿수 모두 더하기
    static void solve(int n) {
        int tmp = n;
        while (tmp != 0) {
            n += tmp % 10;// 원래 n에 자리수 더하기
            tmp /= 10; // 마지막 자리 제거
        }
        if (n <= 10000) chk[n] = true;
    }


[방법2] 문자열 변환

String으로 바꿔서 각 문자를 숫자로 변환 후 합산

    // n의 각 자릿수 모두 더하기
    static void solve(int n) {
        int sum = n;
        String s = String.valueOf(n);
        for(int i=0; i<s.length(); i++){
            sum += s.charAt(i) - '0';
        }
        if (sum <= 10000) chk[sum] = true;
    }



💻 코드

전체 코드

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

public class Main {
    static boolean[] chk;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        chk = new boolean[10_001];

        int n =1;
        while(n < 10_001){
            if (!chk[n]) {
                System.out.println(n);
            }
            solve(n);
            n++;
        }
    }

    // n의 각 자릿수 모두 더하기
    static void solve(int n) {
        int tmp = n;
        while (tmp != 0) {
            n += tmp % 10;// 원래 n에 자리수 더하기
            tmp /= 10; // 마지막 자리 제거
        }
        if (n <= 10000) chk[n] = true;
    }
}


카테고리:

업데이트:

댓글남기기