문제 링크
https://www.acmicpc.net/problem/4673
나의 코드 (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) 인덱스들을 출력해주면 답이 나옵니다.
'코딩공부 > 백준 (java)' 카테고리의 다른 글
[백준 11654] 아스키 코드 (java) (0) | 2021.07.08 |
---|---|
[백준 1065] 한수 (java) (0) | 2021.07.08 |
[백준 15596] 정수 N개의 합 (java) (0) | 2021.07.07 |
[백준 4344] 평균은 넘겠지 (java) (0) | 2021.07.05 |
[백준 8958] OX퀴즈 (java) (0) | 2021.07.05 |
댓글