N

(Leet Code JS)Multiply Strings 본문

Leet Code 알고리즘

(Leet Code JS)Multiply Strings

naeunchan 2022. 3. 21. 09:22
728x90
반응형

https://leetcode.com/problems/multiply-strings/

 

Multiply Strings - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문자열로 주어진 두 수를 곱한 값을 리턴.

문자열의 길이가 200이기 때문에 Number 형으로 나타낼 수 있는 수를 초과할 수 있다.

 

우선 num1과 num2 중 하나라도 "0"이라면 바로 "0"을 리턴.

arr는 num1과 num2의 길이를 합한 크기로 선언하여 0으로 초기화한다.

이후, 두 문자열을 하나씩 곱하여 arr에 저장한다.

 

arr[i + j + 1] += num1[i] * num2[j]

각 자릿수를 곱한다.

 

arr[i + j] += arr[i + j + 1] / 10

위에서 곱한 결과가 10 이상이라면 올림수가 있다는 뜻이므로 arr[i + j + 1] / 10의 결과를 arr[i + j]에 저장한다.

 

arr[i + j + 1] %= 10

올림수를 처리했기 때문에 나머지 값을 arr[i + j + 1]에 다시 저장한다.

 

3가지의 절차를 끝내면 모든 곱셈은 끝이다.

이후 arr을 순회하면서 0이 아닌 첫 수가 나오면 그 자리에서부터 slice 하여 join("")하면 된다.

/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
var multiply = function(num1, num2) {
    if(num1 === "0" || num2 === "0"){
        return "0";
    }
    
    const arr = Array(num1.length + num2.length).fill(0);
    let answer = "";
    
    for(let i = num1.length - 1; i >= 0; i--){
        for(let j = num2.length - 1; j >= 0; j--){
            arr[i + j + 1] += parseInt(num1[i]) * parseInt(num2[j]);
            arr[i + j] += Math.floor(arr[i + j + 1] / 10);
            arr[i + j + 1] %= 10;
        }
    }
    
    for(let i = 0; i < num1.length + num2.length; i++){
        if(arr[i] !== 0){
            return arr.slice(i).join("");
        }
    }
    
    return "0";
};
728x90
반응형

'Leet Code 알고리즘' 카테고리의 다른 글

(Leet Code JS)Letter Combinations of a Phone Number  (0) 2022.03.22
(Leet Code JS)Spiral Matrix  (0) 2022.03.21
(Leet Code JS)House Robber II  (0) 2022.03.16
(Leet Code JS)House Robber  (0) 2022.03.14
(Leet Code JS)Valid Sdoku  (0) 2022.03.11