[LeetCode] 43. Multiply Strings

Chobby·2024년 9월 3일
1

LeetCode

목록 보기
80/194

문제에서 분명히 수로 변환하지 말라했는데 대부분의 풀이는 BigInt형으로 변환하여 곱셈한 후 문자열로 변환하여 제출했음..

해당 풀이는 두 수의 일의자리부터 곱셈 및 올림 처리를 계산하여 정답 문자열을 구성하고 반환하는 풀이임

😎풀이

function multiply(num1: string, num2: string): string {
    const len1 = num1.length;
    const len2 = num2.length;

    // 결과 문자열 최대 길이는 len1 + len2
    const result = new Array(len1 + len2).fill(0);

    for (let i = len1 - 1; i >= 0; i--) {
        for (let j = len2 - 1; j >= 0; j--) {
            // 현재 자리수의 곱 계산
            // "1".charCodeAt(0) - '0'.charCodeAt // 1
            const mul = (num1[i].charCodeAt(0) - '0'.charCodeAt(0)) * (num2[j].charCodeAt(0) - '0'.charCodeAt(0));
            const p1 = i + j; // 다음 곱셈 결과(올림 발생 등)
            const p2 = i + j + 1; // 현재 곱셈 결과

            // 곱한 값을 현재 위치에 더함
            const sum = mul + result[p2];

            // 현재 자리수와 올림 계산
            result[p2] = sum % 10; // 현재 자리수
            result[p1] += Math.floor(sum / 10); // 올림 처리
        }
    }

    let resultStr = result.join('');

    // 임시로 채워진 0 모두 제거
    while (resultStr.length > 1 && resultStr[0] === '0') {
        resultStr = resultStr.slice(1);
    }

    return resultStr || '0'; // 결과가 비어있다면 '0'을 반환
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글