[node.js] 백준 1110번 더하기 사이클(javascript)

쉐런·2022년 9월 12일
0

백준 풀이

목록 보기
1/1

백준 반복문 마지막 문제 1110번

각 자리수를 배열로 빼서 풀려고 했으나 잘 안돼서 결국 구글링을 해서 힌트를 얻었다
각 자리수를 구하는 식으로 1의 자리, 10의 자리 수들을 빼서 풀어보면 더욱 쉽다!

문제

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다.
먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다.
그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.

예시

26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.

위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

풀이

  1. 각 자리 수를 구하는 식 (2 , 6)
  2. 1의 자리를 10의 자리로 만들고 1의 자리(2+6)를 더하기 (6 , 8)
  • 1의 자리 구하는 식
    num % 10
  • 10의 자리 구하는 식
    Math.floor(num/10)
  • 1의 자리 -> 10의 자리 수로 만들기
    (num%10)*10
const fs = require("fs");

const input = require('fs').readFileSync('dev/stdin').toString().trim();
//require('fs').readFileSync('dev/stdin')




let result = Number(input);
let count = 0;

while (true) {
    // 10의 자리수 + 1의 자리수 
    let sum = Math.floor(result / 10) + result % 10;
    // result의 10의자리 + add의 1의 자리 
    result = (result % 10) * 10 + sum % 10;
    count++;
    // input값이랑 result가 같으면 탈출
    if (Number(input) === result) {
        break;
    }
}

console.log(count);

-- 원래 풀려고 했던 방법..(실패..!)

const fs = require("fs");

const input= require('fs').readFileSync('dev/stdin').toString().trim().split(' ')


// 26
// 배열 복사하기 
let result = input.slice();

if(result[0] < 10) {
    // result[0]에 0 더해주기 
      result[0] = '0' + input[0]
    } 
console.log(result)   //['01']

// let A = parseInt(newArr[0][0]); // 0 
// let B = parseInt(newArr[0][1]); // 1
let newArr = result.slice();
do {
    let A = newArr[0][0]; // 0 
    let B = newArr[0][1]; // 1
    result[0][0] = B;
    result[0][1] = A+B;
    console.log(result)
    count++
}
while(result !== input);
profile
How?

0개의 댓글