kakasoo

[node.js] 수 이어 쓰기 1 ( 백준 1748번 ) 본문

프로그래밍/알고리즘 풀이

[node.js] 수 이어 쓰기 1 ( 백준 1748번 )

카카수(kakasoo) 2021. 7. 29. 18:45
반응형
const readline = require("readline");

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

rl.on("line", (line) => {
    const numPad = new Array(line.length).fill(0).map((el, i) => i + 1);

    const acc = numPad.map((el, i) => {
        if (10 ** (i + 1) < Number(line)) {
            return el * 10 ** i * 9;
        } else {
            return el * (Number(line) + 1 - 10 ** i);
        }
    });

    const sum = acc.reduce((a, b) => a + b);
    console.log(sum);
});

// 1~9 9
// 10 ~ 99 2 * 90
// 100 ~ 999 3 * 900
const readline = require("readline");

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

rl.on("line", (line) => {
    let sum = 0;
    for (let i = 1; i <= Number(line); i *= 10) {
        sum += Number(line) - i + 1;
    }
    console.log(sum);
});

// 1~9 9
// 10 ~ 99 2 * 90
// 100 ~ 999 3 * 900

첫번째 풀이로는 test case를 통과했지만 채점 결과 틀렸다고 나왔다. 무엇이 잘못되었는지 모르는 상태이다.
여기서 여기까지는 1... 여기서 여기까지는 2... 더하면 얼마, 이런 식으로 생각하는 것은 너무 어려웠다.
그래서 생각한 게 2번 풀이이다.

932라는 숫자를 입력했다고 해보자.
1 ~ 932까지 전부 1을 더해야 할 것이다.
10 ~ 932까지 전부 1을 더 더해줘야 할 것이다.
100 ~ 932까지 전부 1을 더 더해줘야 할 것이다.

이렇게 생각하는 것이 더 피로도가 적다. 생각 방식만 바꿔도 훨씬 빠르게 풀 수 있는 것을, 3번이나 틀렸다.
이런 풀이를 알아낸 시점에서 1번 풀이에 고집할 필요가 없다.
애초부터 틀린 코드니깐 미련을 가지지 말자.

반응형