본문 바로가기
알고리즘 (with. 백준 문제풀이)/Stack

백준 17413번 [단어 뒤집기 2]

by 천릉객 2023. 9. 16.
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