백준 1110 번 JavaScript 문제풀이

Cho Dragoo·2021년 5월 11일
0
post-thumbnail

JavaScript 백준 온라인 알고리즘 공부

백준 1110 번 JavaScript 문제

더하기 사이클
https://www.acmicpc.net/problem/1110



본인이 제출한 답

const fs = require("fs");
const input = (process.platform === "linux"
  ? fs.readFileSync("/dev/stdin").toString()
  : `1`
).trim();

let turnNumber;
let N = input;

let answerNumber = 0;
while (true) {
  N < 10 ? (N = "0" + N) : (N = String(N));

  let numberAB = Number(N[0]) + Number(N[1]);
  numberAB = String(numberAB);

  numberAB > 9
    ? ((turnNumber = N[1] + numberAB[1]), (turnNumber = Number(turnNumber)))
    : ((turnNumber = N[1] + numberAB), (turnNumber = Number(turnNumber)));

  answerNumber++;

  if (turnNumber === Number(input)) break;
  N = turnNumber;
}

console.log(answerNumber);

풀이과정 소감

  • while문에서 쓰일 입력값변수와 계산을 끝낸 변수만 철저히 돌려 써야하는것에 집중하지 않으면 최초 입력값과 결과값의 비교가 불가능해지며 무한루프에 빠지는 오류를 범할 수 있다.

  • 10의 자리와 1의 자리를 골라 대입을 하는 작업을 할려면 if문과 문자열과 숫자형의 변환을 반복하게 된다. 본인의 경우 10의 자리를 더해 문자열과 숫자형를 반복 변환하며 계산하는 제법 긴 코드에다가 if문을 세번이나 쓰게 됬는데 여기 블로그의 풀이를 참고해보면....

    1의 자리에 있는 수 구하기: num % 10
    10의 자리에 있는 수 구하기: Math.floor(num / 10)
    1의 자리에 있는 수 10의 자리 수로 만들기 : (num % 10) * 10

  • ...라는 공식을 이용해 너무나 간단한 절차로 푸는 방법을 볼 수 있다;;;
    이 공식 덕분에 입력값과 결과값의 변수만으로 while문의 루프가 성립되며 심지어 if문조차 break용으로 한 번만 쓰는게 가능하다.

    본인도 이렇게 바로 좋은 계산절차를 생각해내는 능력이 생겨야 하는데 과연 내가 그렇게 성장할 수 있을지는 여전히 모를일이다.

profile
어떤 문제든 파악 할 수 있으며 해결책을 찾을 수 있는 개발능력을 꿈꾸고 있습니다.

0개의 댓글