Node.js 백준 알고리즘 8

김승우·2021년 6월 9일
0

🎉 함수 2021.06.14

1. 4673 - 셀프 넘버

// 셀프 넘버 구하는 함수
function d(n) {
    var result = n;
    
    // 각 자릿수의 총 합을 구하는 로직
    // 마지막 1의 자리만 남았을 때 10으로 나눈 결과의 정수화된 결과는 항상 0이므로 while문이 종료된다.
    while(n > 0) {
        // n을 10으로 나눈 나머지를 더하고
        result += n%10;
        // n을 10으로 나눈 정수 부분을 다시 n에 대입한다.
        n = parseInt(n/10);
    }
    
    return result;
}

const numbers = [],
      MAX_NUM = 10000;

// init all numbers item to false
for(let i = 0; i <= MAX_NUM; i++) {
    numbers[i] = false;
}

for(let j = 1; j <= MAX_NUM; j++) {
    if(!numbers[j]) {
        console.log(j);
    }
    numbers[d(j)] = true;
}

2. 1065 - 한수

  • 최초 제출
const fs = require('fs');
const input = Number(fs.readFileSync('/dev/stdin').toString());
let count = 0;

function isSequenceNumber(n) {
    let isSeqeunce = false,
        diff = 0,
        prevNum = null;
    
    if(n <= 0) {
        return false;
    }
    
    if(n >= 1 && n <=99) {
        return true;
    } 
    
    while(n > 0) {
        let num = n%10;

        if(prevNum !== null) {
            let newDiff = prevNum - num;

            isSeqeunce = newDiff === diff;

            diff = newDiff;
        }

        prevNum = num;
        n = parseInt(n/10);
    }
    
    return isSeqeunce;
}

for(let i = 1; i <= input; i++) {
    if(isSequenceNumber(i)) {
        count++;
    }
}

console.log(count);
  • 최종 제출
const fs = require('fs');
const input = Number(fs.readFileSync('/dev/stdin').toString());
let count = 0;

function isSequenceNumber(n) {
    let diff = 0;
    
    // n이 100보다 작은 자연수 일때는 무조건 한수
    if(n < 100) {
        return true;
    }

    // Number를 String 타입으로 변환하고, 각 자릿수를 인덱스를 통해 받아오는 방법.
    n = String(n);
    diff = n[0] - n[1];

    for(let i = 1; i < n.length - 1; i++) {
        const newDiff = n[i] - n[i + 1];

      	// 등차수열이 되려면 최초에 구한 diff와 newDiff가 무조건 일치해야한다.
        // 따라서 하나라도 다른 경우에는 한수가 아니므로, return false를 통해 함수를 바로 종료한다.
        if(newDiff !== diff) return false;
    }
    
    return true;
}

for(let i = 1; i <= input; i++) {
    if(isSequenceNumber(i)) {
        count++;
    }
}

console.log(count);
profile
사람들에게 좋은 경험을 선사하고 싶은 주니어 프론트엔드 개발자

0개의 댓글