반응형
문제
풀이
package step6;
public class Main {
public static void main(String[] args) {
//셀프 넘버
boolean[] arr = new boolean[10001];//1~10000까지
for(int i = 1; i <= 10000; i++) {
int num = d(i);
if(num <= 10000) {//10000보다 작거나 같을 때
arr[num] = true;
}
}
StringBuilder sb = new StringBuilder();
for(int i = 1; i <= 10000; i++) {
if(!arr[i]) {
sb.append(i).append("\n");
}
}
System.out.println(sb);
}
public static int d(int n) {
int sum = n;
while(n != 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
}
팁
[ 각 자릿수 분리하기 ]
- 반복문을 활용하여 각 자릿수를 분리하여 더해준다.
ex ) n = 1234일 때.
1) 1234 % 10의 값인 4를 sum에 더하고, n /10의 값인 123을 n에 저장한다.
2) 123 % 10의 값인 3를 sum에 더하고, n /10의 값인 12를 n에 저장한다.
3) 12 % 10의 값인 2를 sum에 더하고, n /10의 값인 1을 n에 저장한다.
4) 1 % 10의 값인 1을 sum에 더하고, n /10의 값인 0을 n에 저장한다.
5) n이 0이므로 반복문을 종료한다.
while(n != 0) {
sum += n % 10;
n /= 10;
}
[ 배열을 활용하여 셀프넘버 구분하기 ]
- 배열을 활용하여 함수 d의 리턴값의 인덱스를 가지는 배열 arr의 값을 true로 바꿔준다.
- arr의 값이 false인 인덱스(셀프 넘버)만 출력한다.
출처
반응형
'알고리즘 > Java' 카테고리의 다른 글
[백준/단계별로 풀어보기] 7. 문자열 - 11654.아스키 코드 (Java8) (0) | 2021.09.03 |
---|---|
[백준/단계별로 풀어보기] 6. 함수 - 1065.한수 (Java8) (0) | 2021.09.02 |
[백준/단계별로 풀어보기] 6. 함수 - 15596.정수 N개의 합 (Java8) (0) | 2021.09.02 |
[백준/단계별로 풀어보기] 5. 1차원 배열 - 4344.평균은 넘겠지 (Java8) (0) | 2021.09.01 |
[백준/단계별로 풀어보기] 5. 1차원 배열 - 8958.OX퀴즈 (Java8) (0) | 2021.09.01 |