📌강의 정리
주어진 문자열에서 반복문으로 하나씩 뽑아 isNaN을 써서 숫자이면
스택에 넣어주고 문자이면 pop 2번과 조건문 4개를 이용해 계산하여 스택에 넣어준다.
스택에 남은 한개의 숫자가 답이다.
📌느낀점
나는 쉬운 문제를 굳이 함수를 써서 어렵게 풀었다.
가끔은 복잡하다 생각되는 풀이가 사실은 간단한 풀이일 수도 있기에 좀 더 깊게 생각해보는 것이
필요한 것 같다. 또한 isNaN의 쓰임새도 잘 생각해두어야 겠다.
//나의코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function calculate(n1, operator, n2) {
let result = 0;
if (operator === "+") {
result = n1 + n2; // '+'버튼을 눌렀을 때
} else if (operator === "-") {
result = n1 - n2; // '-'버튼을 눌렀을 때
} else if (operator === "*") {
result = n1 * n2; // '*'버튼을 눌렀을 때
}
if (operator === "/") {
result = n1 / n2; // '/'버튼을 눌렀을 때
}
return result;
}
function solution(s) {
let answer;
let stack = [];
let tmp1 = 0;
let tmp2 = 0;
for (let i = 0; i < s.length; i++) {
if (Number(s[i]) >= 0 && Number(s[i]) <= 9) stack.push(Number(s[i]));
else {
tmp1 = stack.pop();
tmp2 = stack.pop();
stack.push(calculate(tmp2, s[i], tmp1));
}
}
answer = stack[0];
return answer;
}
//후위식 연산은 스택을 만들고 숫자들을 쌓다가
//연산자가 쌓이면 바로 전과 그 전전의 숫자를 연산자로 계산하여
//스택에 쌓아준다.
//문자열반복이 끝났을때 스택에 남은 숫자가 연산의 결과이다.
let str = "352+*9-";
console.log(solution(str));
</script>
</body>
</html>
//강사님 코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(s) {
let answer;
let stack = [];
for (let x of s) {
if (!isNaN(x)) stack.push(Number(x));
else {
let rt = stack.pop();
let lt = stack.pop();
if (x === "+") stack.push(lt + rt);
else if (x === "-") stack.push(lt - rt);
else if (x === "*") stack.push(lt * rt);
else if (x === "/") stack.push(lt / rt);
}
}
answer = stack[0];
return answer;
}
let str = "352+*9-";
console.log(solution(str));
</script>
</body>
</html>
'JS 알고리즘 문제풀이 > 섹션 6. 자료구조(스택, 큐)' 카테고리의 다른 글
6.공주구하기(큐) (0) | 2022.06.27 |
---|---|
5.쇠막대기(스택) (0) | 2022.06.26 |
3.크레인 인형뽑기(스택):카카오 (0) | 2022.06.24 |
2.괄호 문자 제거(스택) (0) | 2022.06.23 |
1.올바른 괄호(스택) (0) | 2022.06.22 |