[Algorithm/JavaScript] 스택/ 후위식, 쇠막대기

[Algorithm/JavaScript] 스택/ 후위식, 쇠막대기

문제

6-4) 후위식 연산. 식은 1~9의 숫자로만 이루어짐

입력예제

352+2*9-

출력예제

12

코드

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));

stack.pop() 을 rt 와 lt 에 담아서 해결!

if else 구조 idea

문제

6-5) 쇠막대기

입력예제

352+2*9-

출력예제

12

코드 - 내가 작성한 코드

function solution(s) { let answer = 0; let stack = []; for (let i = 0; i < s.length; i++) { if (s[i] === '(') {//레이저 추가 stack.push(s[i]); answer++; } else if (s[i] === ')') { stack.pop(); if (s[i - 1] == '(') { //레이저일 때 answer--; //앞서 레이저시작부분('(')일 때 더했던 부분 뻬기 answer += stack.length; //레이저 개수만큼 더함 } } } return answer; } let a = '(((()(()()))(())()))(()())'; console.log(solution(a));

for문을 돌면서 문자열을 i로 탐색하면서 ) 이 레이저인지, 쇠막대기의 끝인지 확인

코드 - 정답코드

function solution(s) { let answer = 0; let stack = []; for (let i = 0; i < s.length; i++) { if (s[i] === '(') stack.push('('); else { stack.pop(); if (s[i - 1] === '(') answer += stack.length; //레이저인 경우 else answer++; //쇠막대기의 끝인 경우 } } return answer; } let a = '()(((()())(())()))(())';

내 코드에서는 쇠막대기의 시작지점 ( 과 레이저에서 카운팅해주었고,

정답코드에서는 쇠막대기의 끝지점 ) 과 레이저에서 카운팅했다.

from http://yunred.tistory.com/91 by ccl(A) rewrite - 2022-01-01 09:02:17