Development/Program Solving

[백준 단계별로 풀어보기] 6. 함수 (feat. NodeJS)

이쥬딩 2020. 12. 27. 22:56
728x90

4673번: 셀프 넘버

 

4673번: 셀프 넘버

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

www.acmicpc.net

CASE 1 

시간: 108.917ms 

const selfNumber = [];

const main = () => {
  for (let i=1; i<=10000; i++) {
    selfNumber.push(i);
  };

  for(let i=1; i<=10000; i++) {
    const result = i + i.toString().split("").reduce((pre, cur) =>  pre + Number(cur),0);
    const sameIndex = selfNumber.indexOf(result);
    if(~sameIndex) {
      selfNumber.splice(sameIndex, 1);
    }   
  };
  
  for (const number of selfNumber) {
    console.log(number);
  };
};

main();

CASE 2

아무래도 splice로 삭제하면 배열 인덱스가 전체적으로 조정되어야하므로, 이 부분을 변경해서 속도 개선을 했다.

시간: 60.878ms

const selfNumber = [];

const main = () => {
  for (let i=1; i<=10000; i++) {
    selfNumber.push(i);
  };

  for(let i=1; i<=10000; i++) {
    const result = i + i.toString().split("").reduce((pre, cur) =>  pre + Number(cur),0);
    const sameIndex = selfNumber.indexOf(result);
    if(sameIndex) {
      selfNumber[sameIndex] = false;
    }   
  };

  for (const number of selfNumber) {
    if(number) {console.log(number)};
  };
};

main();

 

1065번: 한수

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

CASE 1

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

let number;
const onInput = (input) => number = Number(input);

const onClose = () => {
  let firstNum = 0;
  let answer = [];
  for (let i = 1; i <= number; i++) {
    if(i.toString().length >= 3){
      const numbers = i.toString().split("");
      for (let x = 0; x < numbers.length - 1; x++) {
        const secondNum = Number(numbers[x]) - Number(numbers[x+1]);
        if(x !== 0 && firstNum !== secondNum) {    
          break;
        } else if(x !== 0 && firstNum === secondNum) {
          answer.push(i);
        }     
        firstNum = secondNum;
      };
    }else {
      answer.push(i);
    }   
  };
 
 console.log(answer.length);
  process.exit();
};

rl.on('line', onInput)
  .on('close', onClose);

 

728x90