백준 1918 < 후위 표기식 > JavaScript

2022. 12. 5.·☕️ 커리어 & 인터뷰 준비/코딩 테스트

📍문제 링크

https://www.acmicpc.net/problem/1918

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의

www.acmicpc.net

 

📍알고리즘 분류

- 자료 구조

- 스택

 

📍문제 풀이

- 중위 표기식을 후위 표기식으로 바꿔 출력하라

- 곱셈, 나눗셈은 덧셈, 뺄셈보다 우선순위가 높은 연산자이다

 

📍의사 코드

- 일반 배열과 스택 배열을 만든다

- 주어진 중위 표기식 문자열을 순회하며,

알파벳이면 : 일반 배열에 push

 

( 이면 : 스택에 push

 

) 이면 : 스택 배열의 마지막 원소가 (가 나올 때까지  일반 배열에 push

 

* 또는 / 이면 : 일반 배열에 push

 

+ 또는 - 이면 : 스택에 있는 연산자들을 모두 pop해서 일반 배열에 넣어주는데, ( 가 나오면 멈춤

 

📍코드 (JavaScript)

const input = require("fs").readFileSync("/dev/stdin").toString().trim();
const stack = [];
const answer = [];

for (let i = 0; i < input.length; i++) {
  if (input[i] >= "A" && input[i] <= "Z") {
    answer.push(input[i]);
  } else if (input[i] === "(") {
    stack.push(input[i]);
  } else if (input[i] === "*" || input[i] === "/") {
    while (
      stack.length > 0 &&
      (stack[stack.length - 1] === "*" || stack[stack.length - 1] === "/")
    ) {
      answer.push(stack.pop());
    }
    stack.push(input[i]);
  } else if (input[i] === "+" || input[i] === "-") {
    while (stack.length > 0 && stack[stack.length - 1] !== "(") {
      answer.push(stack.pop());
    }
    stack.push(input[i]);
  } else if (input[i] === ")") {
    while (stack.length > 0 && stack[stack.length - 1] !== "(") {
      answer.push(stack.pop());
    }
    stack.pop();
  }
}

while (stack.length > 0) {
  answer.push(stack.pop());
}

console.log(answer.join(""));

 

📍리뷰

- if - else 문 대신 if문 만 사용하는 것이 가독성에 좋다는 글을 본적이 있는데, else if를 통해 조건을 확실하게 구분하는 편이 마음이 편하다..

 

'☕️ 커리어 & 인터뷰 준비/코딩 테스트' 카테고리의 다른 글
  • 백준 2961 < 도영이가 만든 맛있는 음식 > JavaScript
  • 백준 1759 < 암호 만들기 > JavaScript
  • 백준 1935 후위 표기식2
  • 백준 10844 < 쉬운 계단 수 > JavaScript
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
백준 1918 < 후위 표기식 > JavaScript
상단으로

티스토리툴바