반응형
-해법
public class Main {
static void d(int n,boolean arr[]) { // 셀프넘버를 체크하기 위한 메소드
int result = n; // 각 자리수를 더하기 이전에 해당 정수로 초기화
if(n<10) { // 10보다 작은 경우
if(arr[n+n] ==false) // 셀프넘버가 아닌 경우
arr[n+n] = true; // 해당 인덱스를 체크
}
while(n!=0) { // 10~10000의 경우는 각 자리수를 더해주어야 하므로 반복
result += n%10; // 1의 자리 수부터 차례대로 더해준다.
n/=10; // 1의 자리를 추출했으면 나누어 주면서 정수를 0으로 만들어 간다.
}
if(result<=10000 && arr[result] == false) // 더한 결과가 10000을 넘지 않아야 하며 체크되지 않은 경우에만
arr[result] = true; // 셀프넘버가 아님을 체크
}
public static void main(String[] args) {
boolean arr[] = new boolean[10001]; // 셀프 넘버가 아닌 인덱스들은 true로 체크될 배열
for(int i=1;i<=10000;i++) { // 1부터 10000까지 반복
d(i,arr); // 정수와 체크를 위한 배열을 인자로 넘겨준다.
}
for(int i=1;i<=10000;i++) { // 셀프 넘버를 찾기 위한 반복
if(arr[i]==false) // 체크되지 않은 인덱스는 모두 셀프 넘버이다.
System.out.println(i); // 셀프 넘버들을 출력
}
}
}
이 문제를 풀 때 셀프 넘버를 체크하는 방식이 false라 헷갈릴 수 있다고 생각하는데 true로 체크해도 무방하다. 1부터 셀프 넘버가 아닌 것들을 메서드를 활용해 체크해준다. 내용 자체는 어려울 게 없고 굳이 따지자면 각 자릿수를 추출해 더해주는 과정이 요점이라고 생각한다.
반응형