곽로그
[백준 4673] 셀프 넘버 본문
반응형
4673번: 셀프 넘버
문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는
www.acmicpc.net
접근법
불린배열을 생각했다. n을 입력해서 d(n)을 구한다. 그러면 불린배열에서 인덱스가 d(n)인 요소의 값을 true로 바꾼다. (불린 배열을 선언하면 fasle로 초기화 되기 때문이다) 따라서 위의 작업이 다 끝난 후에 배열의 값이 false인 인덱스 값을 출력하면 그것이 셀프넘버가 된다.
주의점
여기서 d(n)을 구하는 함수를 어떻게 정의할 것인지가 중요한데, 처음에는 if-else를 이용해서 2자리일 때, 3자리일 때, 4자리 일때를 나눠서 d(n)의 값을 구했다. 그것보다 더 간단한 코드는 while문을 이용해서 10으로 나눈 나머지를 더해가는 방법이다.
public class Main {
public static int noSelfNumber(int num) {
int newN=num;
while(num>0) {
newN+=num%10;
num/=10;
}
return newN;
}
public static void main(String[] args) {
boolean[] noSelfNumberA=new boolean[10000];
//배열을 선언하면 false로 초기화 되기 때문에 헷갈리지 않게 배열의 이름에 no를 붙임
for(int i=0;i<noSelfNumberA.length;i++) {
if(noSelfNumber(i)<10000) {
noSelfNumberA[noSelfNumber(i)]=true;
}
}
for(int i=1;i<noSelfNumberA.length;i++) {
if(!noSelfNumberA[i]) {
System.out.println(i);
}
}
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
| [백준 2577] 숫자의 개수 (0) | 2019.04.22 |
|---|---|
| [백준 1065] 한수 (0) | 2019.04.19 |
| [백준 1110] 더하기 사이클 (0) | 2019.04.18 |
| [백준 4344] 평균은 넘겠지 (0) | 2019.04.17 |
| [백준 1546] 평균 (0) | 2019.04.17 |
Comments