const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim();
// const input = "<ab cd>ef gh<ij kl>abc"
const arr = input.split("");
let stack = [];
let isInTag = false; // 태그 밖인지 안인지 구분 (공백 처리)
let str = "";
for(let i=0; i<arr.length; i++){
if(arr[i] == "<"){
isInTag = true;
// < 가 등장하면 앞에 단어는 뒤집어서 추가
str += stack.reverse().join("");
stack = [];
stack.push(arr[i]);
}
else if(arr[i] == ">"){
isInTag = false;
stack.push(arr[i]);
// > 가 등장하면 태그 안에 있으므로 그대로 추가
str += stack.join("");
stack = [];
}
else if(arr[i] == " " && !isInTag){
str += stack.reverse().join("") + " ";
stack = [];
}
// 주의할 구간 : 마지막에 됐을때 그때까지 입력받은 단어도 뒤집어야 함.
else if(i == arr.length - 1){
stack.push(arr[i]);
str += stack.reverse().join("")
}
else{
stack.push(arr[i]);
}
}
console.log(str);
처음엔 tagStack과 wordStack을 구분해서 pStack으로 상황을 바꿔가면서 접근했었다.
하지만 초기화해주는 부분을 잘 보다보니 그냥 스택하나만 쓰는 방향으로 수정
<ab cd>ef gh<ij kl> 의 예제로 문제를 풀다보니 오답이라고 나왔는데, 이는 마지막에 태그가 아니라 단어가 들어갈 경우를 간과한 것.
그 외 특이사항은 없었다.
'알고리즘 (with. 백준 문제풀이) > Stack' 카테고리의 다른 글
백준 1935번 [후위표기식2] (오답) (0) | 2023.09.16 |
---|---|
백준 10799번 [쇠막대기] (0) | 2023.09.15 |
Stack - 이론 (0) | 2023.09.15 |