[JS] 백준 1110. 더하기 사이클

n-u·2022년 6월 26일
0

Algorithm

목록 보기
18/33
post-thumbnail

백준 1110. 더하기 사이클

https://www.acmicpc.net/problem/1110

❌ 풀지 못함

let sumArr = [];
let a;
let b;

let numbers = input.map((i) => i < 10 ? `0${i}` : i);
numbers = numbers.toString().split('');
let sum = Number(numbers[0]) + Number(numbers[1]);
sumArr.push(sum);
console.log(sumArr);


if (input != sum) {
    while (input !== sum) {
        let newNumArr = sumArr.map((i) => i < 10 ? `0${i}` : i);
        let i = newNumArr.toString().split('');
        a = numbers[1];
        b = i[1];
        sum = a + b;
        sumArr = [sum]
        count++;
    }
} else {
    count++;
}

console.log(count);
  1. while문을 적용하는 것까지는 생각함
    ( 하지만, 조건을 어떻게 할지 어려웠음)
  2. 10보다 낮을때에는 0을 조건부로 앞에 붙이고,
    문자열을 나누는 것처럼 나눠 다시 결합하는 방식으로 코드를 작성하다가 결국 코드가 작동이 안되서 포기함

⭕ 정답 코드

https://sangseophwang.tistory.com/72

const fs = require('fs');
const file = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(file).toString().split(' ').map((i) => +i);

let count = 0;
let sum;
let num = input;

while (true) {
    sum = parseInt(num % 10 + num / 10);
    num = (num % 10) * 10 + sum % 10;
    count++;

    if (num == input) break;
}

console.log(count);
  • 반복할 횟수를 모르기때문에 while의 조건문을 true로 해서 계속해서 반복문을 작동킨 후에 조건를 걸어 break를 걸어준다.
  • num의 초기값을 input의 값으로 해준다.
  • 숫자 10의 자리 + 1의 자리를 구하는 식으로 num % 10 + num / 10을 사용해 구해준다음, parseInte()로 정수로 만들어 소수점을 날려준다.
  • sum10의 자리 + 1의 자리의 합을 가진 수가 된다.
  • 문제에서 더하기 전의 1의 자리를 10의 자리수((num % 10) * 10)로, 더한 값의 1의 자리를 1의 자리수(sum % 10)로 위치해주고 num에 할당해주면 num의 값이 변하게 된다.
  • 조건문인 if (num == input)에 부합하는지 확인 후 false라면 while문을 동작한다.

알게 된것

  • 수학적 계산에 대한 생각이 있었다면 문제를 쉽게 풀 수 있다는 점
  • while문 활용을 잘 하지 못하는 점
profile
기록하며 발전하는 삶

0개의 댓글