코테/백준

[백준/JAVA] 4673번: 셀프 넘버

imname1am 2023. 7. 4. 01:12
반응형

🔺 문제

 

4673번: 셀프 넘버

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

www.acmicpc.net

 

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        StringBuilder sb = new StringBuilder();
        
        // 셀프넘버(= 생성자가 없는 숫자) 배열
        boolean[] selfNum = new boolean[10001];
        Arrays.fill(selfNum, true);
        
        for(int i = 1 ; i <= 10000 ; i++) {
            int newNum = getNewNum(i);
            
            // 범위를 넘지 않는 값의 생성자면, 값을 false로 변경
            if(newNum <= 10000) {
                selfNum[newNum] = false;
            }
        }
        
        for(int i = 1 ; i < selfNum.length ; i++) {
            if(selfNum[i]) {
                sb.append(i).append("\n");
            }
        }
        System.out.println(sb);
    }
    
    // 생성자 찾는 함수
    private static int getNewNum(int num) {
        int newNum = num;
        
        while(num > 0) {
            newNum += num % 10;
            num /= 10;
        }
        return newNum;
    }
}
 
cs
✅ 해결 아이디어
✔ 크기가 10000인 boolean 배열을 만들어 셀프넘버 여부를 저장할 수 있도록 했다. (배열 값 기본 설정은 true로)
 - 생성자가 있으면, 셀프넘버가 아니므로 false로 값 변경
 - 생성자가 없으면, 셀프넘버이므로 값을 true로 그대로 둠

 

 


 

🔺 다른 풀이들

- 어차피 자릿수가 커봐야 네 자리밖에 안하니까 일일이 나눠서 구하셨다. 코드 길이가 절반..!

 

로그인

 

www.acmicpc.net

 


💬 느낀 점

우당탕탕..

 

내가 나중에 복습하기 쉽자고 boolean 배열 기본값을 true로 설정해두고,

생성자인 수는 false로 변경하게 했다.;만

굳이 이럴 필요는 없다.

 

1회독 2회독 3회독 4회독 5회독
V        
반응형