[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_