백준 4673 - 셀프 넘버

Updated:

Java

4673 번 - 셀프 넘버

문제

접근 방법

셀프 넘버를 구하는 함수를 구현한 다음, 1부터 10000까지 함수의 입력 값으로 넣어, 방문하지 않은 수를 출력한다.

각 자리수를 구하는 방법으로, int를 string으로 string을 char Array로 변환하여 구하였는데 이 방법 보다는, while문과 나머지 연산자 ‘%’ 를 사용하여 구하는 방법이 효과적이다고 생각한다.

while(n != 0) {
	sum += n % 10;
	n /= 10;
}

코드

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

public class Main {
    static boolean[] vis;
    public static void main(String[] args) throws IOException {
        vis = new boolean[10001];
        for(int i = 1; i <= 10000; i++) {
            d(i);
        }
        
        StringBuilder sb = new StringBuilder();
        sb.append(1).append("\n");
        for(int i = 2; i <= 10000; i++) {
            if(!vis[i])
                sb.append(i).append("\n");
        }
        System.out.println(sb);
        return ;
    }
    
    static void d(int n){
        
        int sum = n;
        String num = String.valueOf(n);
        char[] charNum = num.toCharArray();
        
        for(char c : charNum) {
            sum += c - '0';
        }
        if(sum > 10000)
            return;
        vis[sum] = true;
    }
}