내 풀이
-> boolean 배열을 생성한다
-> 1~10000까지 for문을 돌린다
-> i 를 String으로 변환하고 다시 char형태로 쪼개어 배열에 담는다
-> char배열 안의 데이터를 - '0'
를 이용하여 숫자로 변환 후 모두 더하고 거기에 본래 숫자 i 값도 더한다
-> 위에서 나온 숫자에 해당하는 boolean 배열 위치에 true값을 넣는다
-> boolean[i] 의 값을 꺼내 만약 false라면 출력한다
[코드보기]
public class Main {
public static void main(String[] args) {
boolean[] bool = new boolean[10001];
for(int i =1; i<=10000; i++) {
char[] c = Integer.toString(i).toCharArray();
int answer = 0;
for(char chr : c) {
int num = chr - '0';
answer += num;
}
answer += i;
if(answer <=10000) {
bool[answer] = true;
}
if(!bool[i]) {
System.out.println(i);
}
}
}
}
처음엔 boolean배열을 생성해두고 각 위치마다 값을 넣지 않으면 그곳엔 null
값이 들어가있지 않을까 해서
boolean bool[] = new boolean[10001];
Arrays.fill(bool,true);
이런식으로 아예 전체 초기화를 시켜버렸었는데 여러모로 실험해보니 이럴 필요가 없었다.
boolean배열은 생성만 해두었을경우 기본적으로 다 false
로 셋팅되어 생성되는 모양인지 따로 값을 지정하지 않은 곳을 불러와도 NullPointerException이 발생하지 않고 false
값을 반환했다.
따라서 Arrays.fill(bool,true);
이 코드는 말 그대로 boolean배열을 사용하다 값들을 초기화하고 싶을때 사용하면 될 것 같다. (다만 사용하려면 import java.util.Arrays;
가 필요)
다른사람의 풀이
나는 위 문제를 int -> Sting -> char -> int 식으로 여러번 형변환을 해가며 풀어냈었다.
하지만 이렇게 형변환 없이도 while문으로 바로 원하는 값을 구해낸 코드를 발견했다.
public static int d(int number){
int sum = number;
while(number != 0){
sum = sum + (number % 10); // 첫 째 자리수
number = number/10; // 10을 나누어 첫 째 자리를 없앤다
}
return sum;
}
이런식으로 while을 돌며 %로 각 자리수를 구하는 방식이다.
댓글남기기