728x90

문제


https://www.acmicpc.net/problem/4673

 

4673번: 셀프 넘버

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,

www.acmicpc.net

 

코드


//실버5 셀프 넘버
//https://www.acmicpc.net/problem/4673
function selfNumber(n) {
let number = n; //생성자인 n copy
let result = 0;
//숫자를 10으로 나누며 각 자릿수를 result에 더함
for (let i = 0; i < String(n).length; i++) {
result += number % 10;
number = Math.floor(number / 10);
}
return n + result; //입력받은 수 n과 result를 더하여 return
}
const range = 10000;
let selfNumbers = new Array(range + 1).fill(true); //0~10000까지의 index를 가지는 배열 생성하고 true로 초기화
//selfNumber함수에 생성자 i를 인자로 줬을 때, return되는 수는 셀프넘버가 아니므로 false로 만들기
for (let i = 0; i <= range; i++) {
selfNumbers[selfNumber(i)] = false;
}
//정답 출력
for (let i = 0; i < range; i++) {
if (selfNumbers[i] === true) console.log(i);
}

 

후기


  • 처음에 규칙을 찾는데도 시간이 좀 걸렸고, 판단된 셀프넘버를 어떻게 처리해줘야하는지에서도 고민이 길어졌다.
  • 다른 분의 풀이를 참고하여 범위가 주어졌으니 해당 크기의 배열을 선언하여 셀프넘버 여부를 처리해주는 게 시간 단축에도 좋아서 좋은 풀이라고 생각했다. 
잘못된 내용이나 수정이 필요한 내용이 있으면 언제든 댓글 달아주세요 감사합니다 😀

+ Recent posts