
Code


😢 무언가 원초적인 방법으로 풀었던 문제, 어떻게 풀어 나갈지에 대한 고민을 조금 했다.
😊 기존 제출 Solution) array를 선언하고, 모든 index 값을 0으로 초기화해준 후 Self Number가 아니라면 해당 index에 1을 넣어주었다.
그리고 마지막에 for loop의 i를 이용해 array[i]의 값이 1이 아니라면(=Self Number라면) Self Number인 i를 출력하도록 했다.
[추가] 최종 제출 Solution)
while loop 안에서 각 자릿수 나눠주기 + 나눠준 값 더하기를 진행하여 코드의 복잡도를 줄여줬다. 또한 시간도 더 빨라졌다.
그리고 배열 10000개 만큼 false로 채워주고, 셀프 넘버가 아니라면 true로 변경시켜주었다. 따라서 false로 남아있다면 그건 셀프 넘버다.
✔ 각 자릿수를 구하는 것은 매우 원초적인 방법으로 진행했다.
54321인 다섯 자리를 기준으로 설명하자면,
parseInt( 54321/10000 )(=5.4321)은 5
parseInt( (54321%10000) / 1000 )(=4.321)은 4
parseInt( (54321%1000) / 100 )(=3.21)은 3
parseInt( (54321%100) / 10 )(=2.1)은 2
54321 % 10 은 1
아래 Full Code에는 위의 자릿수 나누는 방식을, 다른 방법으로 접근한 Code가 있다.
✔ while loop을 이용한 자릿수 나누고, 바로 더하기
let temp = 나눌값;
let sum = temp;
while( 0 > temp){
sum += temp%10;
temp = parseInt(temp/10); }
또한, 다른 사람들이 푼 풀이가 매우 흥미로워서 그 방법들도 함께 연습했다. 세상에는 대단한 사람들이 참 많다.
Full Code (https://github.com/DasolPark/Dasol_JS_Algorithm/tree/master/Baekjoon)
| // Self Number |
| // 4th Solution |
| const n = 10000; |
| const isSelfNum = new Array(n + 1); |
| isSelfNum.fill(true); |
| function d(n) { |
| const N = n.toString().split(''); |
| return n + N.reduce((acc, num) => (acc += +num), 0); |
| } |
| for (let i = 1; i <= n; i++) { |
| isSelfNum[d(i)] = false; |
| } |
| for (let i = 1; i <= n; i++) { |
| if (isSelfNum[i]) { |
| console.log(i); |
| } |
| } |
| // 3rd Solution |
| // function d(n) { |
| // let temp = n; |
| // let sum = temp; |
| // while (temp > 0) { |
| // sum += temp % 10; |
| // temp = parseInt(temp / 10); |
| // } |
| // return sum; |
| // } |
| // const N = 10000; |
| // const selfNumCheckArr = new Array(N); |
| // selfNumCheckArr.fill(false); |
| // for (let i = 1; i <= N; i++) { |
| // selfNumCheckArr[d(i)] = true; |
| // if (!selfNumCheckArr[i]) { |
| // console.log(i); |
| // } |
| // } |
| // 1st solution |
| // const N = 10000; |
| // let arr = []; |
| // for (let i = 0; i <= N; i++) { |
| // d(i); |
| // } |
| // function d(n) { |
| // if (n < 10) { |
| // arr[n + n] = 1; |
| // } else if (n < 100) { |
| // arr[n + parseInt(n / 10) + (n % 10)] = 1; |
| // } else if (n < 1000) { |
| // arr[n + parseInt(n / 100) + parseInt((n % 100) / 10) + (n % 10)] = 1; |
| // } else if (n < 10000) { |
| // arr[ |
| // n + |
| // parseInt(n / 1000) + |
| // parseInt((n % 1000) / 100) + |
| // parseInt((n % 100) / 10) + |
| // (n % 10) |
| // ] = 1; |
| // } else { |
| // arr[ |
| // n + |
| // parseInt(n / 10000) + |
| // parseInt((n % 10000) / 1000) + |
| // parseInt((n % 1000) / 100) + |
| // parseInt((n % 100) / 10) + |
| // (n % 10) |
| // ] = 1; |
| // } |
| // } |
| // for (let i = 1; i <= N; i++) { |
| // if (!(arr[i] === 1)) { |
| // console.log(i); |
| // } |
| // } |
| // 2nd solution(string - array[index]) |
| // const N = 10000; |
| // const arr = []; |
| // for (let i = 0; i <= N; i++) { |
| // arr[i] = 0; |
| // } |
| // for (let i = 1; i <= N; i++) { |
| // d(i); |
| // } |
| // function d(n) { |
| // const str = n.toString(); |
| // if (n < 10) { |
| // arr[n + n] = 1; |
| // } else if (n < 100) { |
| // arr[n + parseInt(str[0]) + parseInt(str[1])] = 1; |
| // } else if (n < 1000) { |
| // arr[n + parseInt(str[0]) + parseInt(str[1]) + parseInt(str[2])] = 1; |
| // } else if (n < 10000) { |
| // arr[ |
| // n + |
| // parseInt(str[0]) + |
| // parseInt(str[1]) + |
| // parseInt(str[2]) + |
| // parseInt(str[3]) |
| // ] = 1; |
| // } else { |
| // arr[ |
| // n + |
| // parseInt(str[0]) + |
| // parseInt(str[1]) + |
| // parseInt(str[2]) + |
| // parseInt(str[3]) + |
| // parseInt(str[4]) |
| // ]; |
| // } |
| // } |
| // for (let i = 1; i <= N; i++) { |
| // if (arr[i] === 0) { |
| // console.log(i); |
| // } |
| // } |
'Algorithm > JavaScript(Node.js)' 카테고리의 다른 글
| Steps(#으로 계단 출력하기) Node.js(JavaScript) (0) | 2019.12.30 |
|---|---|
| Capitalize(단어의 첫 번째 알파벳을 대문자로 바꾸기) Node.js(JavaScript) (0) | 2019.12.30 |
| Chunk(size만큼 sub array 잘라 넣기) Node.js(JavaScript) (0) | 2019.12.29 |
| 백준 4344번: 평균은 넘겠지(It'll be above average) Node.js(JavaScript) (0) | 2019.12.28 |
| Anagrams(철자 순서를 바꾼 말) Node.js(JavaScript) (0) | 2019.12.28 |