본문 바로가기
코딩공부/백준 (java)

[백준 4673] 셀프 넘버 (java)

by CodingKwon 2021. 7. 7.

문제 링크

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

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

 

나의 코드 (java)

public class Main{
  public static void main (String[] args){
    // 셀프넘버를 체크할 배열 생성
    int check[] = new int[10001];

    // 1~10000까지 돌면서 셀프넘버가 아니면 1을 넣음
    for (int i=1; i<10001; i++){
      int n = d(i);
      if (n < 10001){
        check[n] = 1;
      }
    }
    // check 배열을 돌면서 셀프넘버를 출력
    for (int j=1; j<10001; j++){
      if (check[j] == 0){
        System.out.println(j);
      }
    }
  }

  public static int d(int num){
    // 입력 값을 미리 더함
    int sum = num;

    // 반복문을 통해서 0이 될 때까지 검증
    while(num > 0){
      // 일의 자리 숫자를 더함
      sum = sum + (num % 10);
      // 10을 나눠서 일의 자리 숫자를 십의 자리 숫자로 바꿈
      num = num / 10;
    }

    return sum;
  }
}

밑에 d라는 함수에서 셀프 넘버를 구해줍니다.

함수 d에서 자신의 값을 입력받고 한 자릿수씩 sum에 더해주고 마지막 자리 숫자까지 검증을 완료하면 그 값을 반환해줍니다.

이렇게 반환된 값은 셀프 넘버가 아니기 때문에 미리 만들어둔 배열에 1을 더해서 표시해줍니다.

이러한 과정이 끝나면 검증하기 위해 만든 배열에 값이 올라가지 않은(0) 인덱스들을 출력해주면 답이 나옵니다.

댓글