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
* 문제에 답이 있다.
- d(n) 은 n과 n의 각 자리수를 더하는 함수라고 정의하자 => 이 함수를 구현해야한다.
- 10000 이하의 셀프넘버가 아닌 수를 찾고 뺀다.
셀프넘버를 바로 찾아서 출력하는 것만 생각했었는데, 잘 풀리지 않아서 구글링을 해보고 풀게 되었다.
숫자 배열을 미리 만들어 놓고, 셀프넘버가 아닌수 즉 d(n)값이 아닌 수만 제외하고 다시 출력한다는 것은 생각하지 못했었다.
이 문제의 알고리즘은 부르트포스 알고리즘을 활용한 것이다. 완전탐색 알고리즘으로 가능한 모든 경우의 수를 다 탐색하면서 요구조건에 충족되는 결과만을 가져오는 것이다.
function d(n){
let number = n;
let result = 0;
for(let i = 0; i<String(n).length; i++){
// number를 10으로 나눠가면서 각 자리수를 result에 합한다.
result += number%10;
number = Math.floor(number/10);
}
return n+result;
}
const range = 10000;
// 0~10000 까지 셀프넘버 배열 생성하고 true로 초기화
let selfNumbers = Array(range+1).fill(true);
for(let i = 0; i<=range;i++){
// 셀프넘버가 아니면 false로 변환
selfNumbers[d(i)] = false;
}
for(let i =0; i<range;i++){
if(selfNumbers[i]){
console.log(i);
}
}
느낀 점 : 함수에 좀 더 익숙해져야겠다. 자바를 주로 하다보니 자바스크립트 함수가 아직 낯설어서 반복적으로 연습해야겠다.
728x90
반응형
'CODING-TEST' 카테고리의 다른 글
[백준 문제풀이 JS] 1152번 단어의 개수 (0) | 2022.07.04 |
---|---|
[백준 문제풀이 javascript 자바스크립트] 1157번 단어 공부 (0) | 2022.06.26 |
[백준 문제풀이 javascript] 4344번 평균은 넘겠지 (0) | 2022.06.16 |
[백준 문제풀이 자바java11] 10845번 큐 (0) | 2021.06.08 |
[백준 문제풀이 자바java11] 1406번 LInkedList, 스택 자바 (0) | 2021.06.06 |