JavaScript 백준 온라인 알고리즘 공부
백준 1110 번 JavaScript 문제
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용으로 한 번만 쓰는게 가능하다.
본인도 이렇게 바로 좋은 계산절차를 생각해내는 능력이 생겨야 하는데 과연 내가 그렇게 성장할 수 있을지는 여전히 모를일이다.