자바스크립트에서 큰 수는 지수로 표현되므로 문제에서 원하는 출력값으로 바꾸려면 문자열로 출력하거나 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");
배울 점
:
'코딩 기록장' 카테고리의 다른 글
파이썬, 코틀린, 자바스크립트 - 백준 문제 풀이 1001번 : A-B (0) | 2022.01.07 |
---|---|
파이썬, 코틀린, 자바스크립트 - 백준 문제 풀이 1000번 : A+B (0) | 2022.01.06 |
python 3 : 프로그래머스 Level. 1 가운데 글자 가져오기 (0) | 2020.11.06 |
python 3 : 프로그래머스 Level. 1 3진법 뒤집기 (0) | 2020.11.06 |
python 3 : 프로그래머스 Level. 1 2016년 (0) | 2020.11.06 |