프로그래머스 | +, - 계산기

chaen·2024년 3월 2일
post-thumbnail

📌 문제

문자열 계산식을 입력받는 계산기를 만드려고 합니다. 계산식은 덧셈, 뺄셈, 숫자로만 이루어져 있습니다. 계산식 s가 주어질 때, 계산식의 계산 결과를 출력하는 프로그램을 구현하세요.

입출력 예

sanswer
-3+26-716
4-5+109

✨ 해결 방법

stack을 이용하여 덧셈과 뺄셈 기호를 기준으로 문자열을 자릅니다. 우선 문자열 s를 각 문자별로 배열로 만들고, stackanswer, currN을 선언합니다.

배열 s를 순회하면서 currN에 현재 요소들을 더할 건데, 만약 +-면서 currN이 하나라도 차 있다면 stack에 현재까지 쌓인 요소를 더하고 currN를 비웁니다. 그 뒤 다시 currN에 현재요소부터 쌓아줍니다.

배열을 한 번 돌았다면 마지막 숫자가 남게 되므로 (-7) 마지막까지 stack에 넣어주고, stack이 빌 때까지 앞에서부터 answer에 더하면서 넣어줍니다. 이때 stack의 요소들은 문자열이므로 숫자화하여 더해줍니다.

💻 solution

function solution(s) {
    let stack = [];
    let answer = 0;
    let currN = '';

    [...s].forEach(e => {
        if ((e === '+' || e === '-') && currN != ''){
            stack.push(currN);
            currN = '';
        }
        currN += e;
    })

    if (currN !== ''){
        stack.push(currN);
    }

    while (stack.length > 0){
        answer += parseFloat(stack.shift());
    }

    return answer;
}

-3+26-7 가 있을 때를 가정해봅시다.

  • -가 나올 때 : currN이 비어있으므로 조건 충족 x, currN에 저장
  • 3이 나올 때 : 조건 충족 x, currN에 저장
  • +가 나올 때 : 조건 충족, currN(-3)을 stack에 저장, currN을 비운 후 currN에 저장
  • 2와 6이 나올 때 : 조건 충족 x, currN에 저장
  • -가 나올 때 : 조건 충족, currN(+26)을 stack에 저장, currN을 비운 후 currN에 저장
  • 7이 나올 때 : 조건 충족 x, currN에 저장

배열을 다 돌았는데도 currN에 -7이 남아있으므로 마저 stack에 넣어줍니다.
현재까지 stack = ['-3', +26', '-7']
따라서 모두 숫자로 바꿔준 후 처음부터 더해줍니다.

0개의 댓글