문제 : 후위식 연산(postfix)
문제 설명
후위연산식이 주어지면 연산한 결과를 출력하는 프로그램을 작성하세요.
만약 3(5+2)-9 을 후위연산식으로 표현하면 `352+9-` 로 표현되며 그 결과는 12입니다.
▣ 입력설명
첫 줄에 후위연산식이 주어집니다. 연산식의 길이는 50을 넘지 않습니다.
식은 1~9의 숫자와 +, -, *, /
연산자로만 이루어진다.
▣ 출력설명
연산한 결과를 출력합니다.
▣ 입력예제 1
352+*9-
▣ 출력예제 1
12
내코드
function solution(s) {
let answer;
let stack = [];
let regex = /[\+\-\*\/]/; // 사칙연산 문자 확인용 정규식
for (const word of s) {
// 사칙연산 문자일 경우
if (regex.test(word)) {
let right = parseInt(stack.pop()); // 좌측 숫자
let left = parseInt(stack.pop()); // 우측 숫자
// 계산 진행
switch (word) {
case "+":
answer = left + right;
break;
case "-":
answer = left - right;
break;
case "*":
answer = left * right;
break;
case "/":
answer = left / right;
break;
default:
break;
}
stack.push(answer); // 계산 결과 stack 에 반영
continue;
}
// 숫자의 경우 바로 스택에 등록
stack.push(word);
}
answer = stack.pop();
return answer;
}
let str = "352+*9-";
console.log(solution(str));
풀이
- 후위식 문자열을 순회하면서 현재 문자를 사칙연산 문자 확인용 정규식을 통해 사칙연산 문자가 아닌 숫자의 경우 stack 에 push 하여 등록
- 사칙연산 문자의 경우 stack 에서 2번 pop 하여 각각 좌측 연산 숫자와 우측 연산 숫자로 구분한뒤 부호 에 맞게 계산하여 다시 stack 에 push 하여 등록
- 결과적으로 stack 남는 값이 최종 연산 결과를 담고 있으므로 pop 한 값을 반환
참고
'코딩 테스트 문제 및 풀이' 카테고리의 다른 글
[JS] 코딩 테스트 문제 : 공주 구하기 [큐] (0) | 2024.01.08 |
---|---|
[JS] 코딩 테스트 문제 : 쇠막대기 [스택] (0) | 2024.01.06 |
[JS] 코딩 테스트 문제 : 크레인 인형뽑기(카카오 기출) [스택] (0) | 2024.01.04 |
[JS] 코딩 테스트 문제 : 괄호 문자 제거 [스택] (0) | 2024.01.04 |
[JS] 코딩 테스트 문제 : 올바른 괄호 [스택] (0) | 2024.01.04 |