Rev Notebook

[S5] 백준 4673 셀프 넘버 - Java

by Rev_

[코드]

// 셀프 넘버
public class Main {
    public static void main(String[] args) {
        int n = 10000;
        boolean[] idx = new boolean[n + 1];  // index 10000 까지의 배열 생성

        for (int i = 0; i < n + 1; i++) {
            if (d(i) < n + 1) {
                idx[d(i)] = true;  // 셀프 넘버가 아닌 것
            }
        }

        for (int i = 0; i < n + 1; i++) {
            if (!idx[i]) {
                System.out.println(i);
            }
        }
    }

    public static int d(int n) {
        int res = n;

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

문제 해결을 위해 10000까지의 index를 나타낼 수 있는 boolean 배열을 생성해준다.

이 boolean 배열에서 셀프 넘버가 아닌 요소들을 모두 true로 바꿔준다.

그리고 false인 요소들만 출력해주면 셀프 넘버를 구할 수 있다.

 

나는 항상 헷갈리는 것이 정수의 각 자릿수의 합을 구하는 계산이 어렵다.

d() 메서드를 자세히 살펴보도록 하자.

public static int d(int n) {
    int res = n;

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

정수형 변수 n을 파라미터로 받아오는 메소드 d이다.

n % 10일의 자리 숫자를 얻어올 수 있다.

n / 10일의 자리를 제외한 나머지 숫자만 남게 해준다.

몫이 0이 될 때까지 while문을 반복해주면 아무리 큰 숫자라도 분리할 수 있다.

 

boolean 배열을 이용한다면 간단하게 풀 수 있는 문제이다.

'PS > PS' 카테고리의 다른 글

[S1] 백준 1149 RGB거리 - Java  (0) 2022.09.19
[B4] 백준 11720 숫자의 합 - Java  (0) 2022.08.11
[B2] 백준 2577 숫자의 개수 - Java  (0) 2022.08.05
[B4] 백준 15552 빠른 A+B - Java  (0) 2022.08.03
[B3] 백준 2588 곱셈 - Java  (0) 2022.07.31

블로그의 정보

Hi Rev

Rev_

활동하기