문제링크
문제풀이
표기법 변환부분을 복습하였다.
2022.06.29 - [공부기록/자바스크립트 코딩테스트] - 중위표기법 후위표기법 변환
그리고 이 코드를 참조하였다.
https://velog.io/@enchantee/%EB%B0%B1%EC%A4%80-1918-Python
코드를 이해하는 과정에서 왜 ' ( ' 괄호까지 while문을 돌아야하지? 라는 궁금증때문에 꽤 고민했다.
(A+B*C+D*E) 예시를 한번 후위표기식으로 바꾸어보자. 그러면 이해가 될 것이다.
case "+":
while (stack.length > 0 && stack[stack.length - 1] != "(") {
ans += stack.pop();
}
stack.push("+");
break;
case "-":
while (stack.length > 0 && stack[stack.length - 1] != "(") {
ans += stack.pop();
}
stack.push("-");
break;
전체코드
const fs = require("fs");
BOJkey = 1;
let input = fs
.readFileSync(BOJkey ? "./자바스크립트로/1918/input.txt" : "./dev/stdin")
.toString()
.trim();
let ans = "";
let stack = [];
for (let i = 0; i < input.length; i++) {
if (input[i].charCodeAt() >= 65 && input[i].charCodeAt() <= 90) {
ans += input[i];
} else {
switch (input[i]) {
case "(":
stack.push("(");
break;
case "+":
while (stack.length > 0 && stack[stack.length - 1] != "(") {
ans += stack.pop();
}
stack.push("+");
break;
case "-":
while (stack.length > 0 && stack[stack.length - 1] != "(") {
ans += stack.pop();
}
stack.push("-");
break;
case "/":
while (
stack.length > 0 &&
(stack[stack.length - 1] == "/" || stack[stack.length - 1] == "*")
) {
ans += stack.pop();
}
stack.push("/");
break;
case "*":
while (
stack.length > 0 &&
(stack[stack.length - 1] == "/" || stack[stack.length - 1] == "*")
) {
ans += stack.pop();
}
stack.push("*");
break;
case ")":
while (stack.length > 0 && stack[stack.length - 1] != "(") {
ans += stack.pop();
}
stack.pop();
break;
}
}
}
while (stack.length) {
ans += stack.pop();
}
console.log(ans);
다른분 코드 참고
하나 배울점이 있었는데 코드를 참고하신분께서는 정규표현식으로 알파벳을 구분하셨다.
나는 아스키코드값으로 나누는 방식을 택했는데 저렇게도 할 수 있겠구나 또 다시 상기시킬 수 있었다.
if (/[A-Z]/.test(input[i])) printer += input[i]; //다른 분
if (input[i].charCodeAt() >= 65 && input[i].charCodeAt() <= 90) {
ans += input[i];
} // 나
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
[백준/JS] 14425 문자열집합 (0) | 2022.07.02 |
---|---|
[백준/JS] 1620 나는야 포켓몬 마스터 이다솜 (0) | 2022.07.01 |
[백준/JS] 2493 탑 (0) | 2022.07.01 |
[백준/JS] 2800 괄호제거 (0) | 2022.06.30 |
[백준/Python] 2346 풍선 터뜨리기 (0) | 2022.06.30 |