👉https://www.acmicpc.net/problem/4673
셀프넘버가 아닌 숫자를 구해서 한 배열에 넣고, 1 ~ 10,000까지 배열에서 이 배열을 빼면 셀프넘버를 구할 수 있다 라고 생각했다.
결과적으로 값을 구하는데는 성공 하였지만, 너무 지저분하게 푼거 같아 오늘의 배운점 및 교훈에서 깔끔하게 푼 풀이를 리뷰해봐야겠다.
let arr = [];
let arr2 = [];
let input = 1;
let num = 0;
while(input <= 10000){
num = input;
let sum = 0;
while(num > 0){
sum += num % 10;
num = parseInt( num / 10);
}
sum += input
arr.push(sum)
input++;
}
arr =arr.sort((a,b) => a - b);
let set1 = new Set(arr);
arr = [...set1];
for( let i = 1; i <= 10000; i++){
arr2.push(i);
}
let difference = arr2.filter(x => !arr.includes(x));
difference.map(val => console.log(val));
function NotSelfnumber(N){
//숫자 하나를 더하는 것에 대한 함수
let sum = N
while(true){
if(N == 0) break;
sum += N % 10
N = parseInt(N/10)
}
return sum; //무엇을 return할지 꼭 써주기
}
function selfnumber(N){
let selfnum = []
let result = []
for(let i=1; i <= N; i++){
let index = NotSelfnumber(i);
if(index <= N){
selfnum[index] = true;
}
}
for(let i=1; i<= N; i++){
if(!selfnum[i]) result.push(i);
}
console.log(result.join('\n'));
}
selfnumber(10000);
우선 이 해당 문제가 함수라는 단계에 있는데 함수를 한번도 안쓰다니;; 내일 함수 문제가 하나 있으니 거기에서는 꼭 함수를 써야겠다.
코테문제에서 각 자릿수를 더해서 푸는 문제가 굉장히 많다. 해당 문제 푸는 법에 대해 잊지 않도록 다시 한번 연습해봐야겠다.
셀프넘버를 구하기 위해 차집합만 생각했었는데, 처음부터 그 숫자를 각 인덱스에 맞춰서 true값으로 지정한 후, true가 아닌 값만 넣는 방법을 보고 이런 방법도 있구나 라는 생각을 했다. 해당 방법에도 익숙해져야겠다.
어제 문제는 잘 풀어서 기분이 좋았지만, 오늘 바로 무너지다니 역시 배움의 길은 멀고 험하다!!! 흑흑