문제
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
메모
- String.length: UTF-16 코드 유닛을 기준으로 문자열의 길이를 나타낸다.
- Math.floor(): 주어진 숫자와 같거나 작은 정수 중에서 가장 큰 수를 반환한다.
- 나머지(%): 왼쪽 피연산자를 오른쪽 피연산자로 나눴을 때의 나머지를 구한다. 부호는 항상 왼쪽 피연산자의 부호를 따른다.
- Array.prototype.fill(): 배열의 시작 인덱스부터 끝 인덱스의 이전까지 정적인 값 하나로 채운다.
정답
function d(n) {
let number = n;
let result = 0;
for (i = 0; i < String(n).length; i++) {
// number를 10으로 나눠가면서 각 자리수를 result에 더한다.
result += number % 10;
number = Math.floor(number / 10);
}
// 입력받은 수와 result를 더하여 return
return n + result;
}
const range = 10000;
// 0~10000 범위까지 셀프넘버 배열을 생성하고 true로 초기화.
let selfNumbers = Array(range + 1).fill(true);
for (i = 0; i <= range; i++) {
// 셀프넘버가 아니면 false로 변환.
selfNumbers[d(i)] = false;
}
// true index만 출력
for (i = 0; i < range; i++) {
if (selfNumbers[i]) {
console.log(i);
}
}