백준 코드 13277번 문제 풀이

 

 

자바스크립트에서 큰 수는 지수로 표현되므로 문제에서 원하는 출력값으로 바꾸려면 문자열로 출력하거나 bigInt를 써야 한다.

 

첫 번째 답안(실패)

: 큰 수로 변환하는 것을 생각하지 못하고 그냥 숫자로 계산해서 틀림

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

let results = Number(input[0]) * Number(input[1]);

console.log(results);

두 번째 답안(실패)

: 시간 초과

const input = ["893724358493284", "238947328947329"];

console.time("timeCheck");

let results = String(BigInt(input[0]) * BigInt(input[1]));

console.log(results); //213553048277135320552236238436

console.timeEnd("timeCheck"); //timeCheck: 5ms - 타이머 종료됨

세 번째 답안

const input = ["893724358493284", "238947328947329"];

console.time("timeCheck");

let shortNumber, longNumber;
let results = [];

if (input[0].length <= input[1].length) {
    shortNumber = input[0].split("").reverse();
    longNumber = input[1].split("").reverse();
} else {
    shortNumber = input[1].split("").reverse();
    longNumber = input[0].split("").reverse();
}

for (i = 0; i < shortNumber.length; i++) {
    for (j = 0; j < longNumber.length; j++) {
        let n = Number(shortNumber[i]) * Number(longNumber[j]);
        n = String(n).padStart(2, "0").split("");

        if (results[i + j] == undefined) {
            results[i + j] = 0;
        }
        if (results[i + j + 1] == undefined) {
            results[i + j + 1] = 0;
        }

        results[i + j] += Number(n[1]);
        results[i + j + 1] += Number(n[0]);
    }
}

results.forEach(function (value, i, results) {
    v = String(value).padStart(2, "0").split("");
    results[i] = v[1];
    results[i+1] += Number(v[0]);
});

if (isNaN(results[results.length-1])) {
    results.pop();
}
if (results[results.length-1] == "0") {
    results.pop();
}

results.reverse();
results = results.join("")
console.log(results);
console.timeEnd("timeCheck");

배울 점

 

+ Recent posts