나는 컴공이다!

PS 기초문제 풀면서 든 생각(feat.무한계산기와 대학교 전공에 관하여)

택 오버플로우 닷컴 2025. 8. 27. 00:02

대학교에 다닐 당시 필자는 전공수업을 매우 등한시 하였다.

코딩에 한창 빠져있을 때라 저런 구닥다리 이론보단 코딩을 많이 하면서 실무능력을 쌓는 것이 우선이라 생각했다.

하지만 돌이켜보니 그건 약간 비뚤어진 생각이었다는 생각이 든다.

 

실제로 개발자로 근무할때도 데이터베이스를 설계할때 정규화라든지 이런 이론을 활용하여 문제를 해결한 경험이 꽤 있었기도 하고.

오늘 숫자로 된 두 문자열의 합을 계산하는 문제를 풀다가 막혔을때 문득 전공수업때 배웠던 내용이 생각이 났다.

바로 무한계산기다. 와... 전공이 괜히 전공은 아니구나 싶었다. 배운지 아마도 10년은 훌쩍 넘었을건데 이게 왜 갑자기 기억이 나는가 ㅋㅋㅋ 어처구니가 없었지만 그때 배웠던 내용을 떠올리면서 문제를 해결할 수 있었다.

정수의 크기가 한도를 초과하다보니 그냥 a+b 식으로 계산했다간 결과값이 이상해지는 문제였다.

그래서 보수를 취해주면서 한자리씩 한땀한땀 계산하여 배열에 저장하는 식으로 문제를 해결하였다.

이게 바로 무한계산기의 원리이다.

문제와 코드를 담고 글을 마무리 짓겠다. 재미있으니 한번 풀어보시라.

 

 

function solution(a, b) {
    var answer = 0;
    let complement = 0;
    let aIndex = a.length - 1;
    let bIndex = b.length - 1;
    let sumArr = [];
    let temp = 0;
    
    while(aIndex >= 0 || bIndex >= 0){
        temp = Number(a.charAt(aIndex)) + Number(b.charAt(bIndex)) + complement;
        if(temp >= 10){
            complement = 1;
            sumArr.push(temp - 10);
        }else{
            complement = 0;
            sumArr.push(temp);
        }
        aIndex--;
        bIndex--;
    }
    if(complement > 0){
        sumArr.push(complement);    
    }
    
    answer = sumArr.reverse().join("");
    return answer;
}