BOJ[17413] - 단어 뒤집기 2 by JavaScript
단어 뒤집기 2
문제
언어
- JavaScript
문제 풀이 step 1
- queue와 stack을 하나씩 준비합니다.
- 주어진 문자열 S에서 단어만 뒤집어야 합니다.
<와>로 둘러쌓인 문자열은 단어가 아니기에 뒤집지 않습니다. 고로 queue에 넣어줍니다.- 위의 말을 반대로 생각하면
<와>의 안에 위치한 문자가 아니면 단어입니다. 고로 괄호 안에 있지 않다면 stack에 넣어줍니다. - 단어의 끝에 도달하면 stack에서 하나씩 pop하며 queue에 넣어줍니다. 단어의 끝은
' '(공백 문자) 또는<(시작 괄호)를 만났을 때입니다.
문제 풀이 step 2
- stack에서 하나씩 pop하며 queue에 넣어주는 과정이 반복되기 때문에 별도의 함수로 분리했습니다.
소스 코드
const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
const moveStackToQueue = (queue, stack) => {
while (stack.length > 0) {
queue.push(stack.pop());
}
};
const solution = (input) => {
const arr = [...input[0]];
const queue = [];
const stack = [];
let flag = false;
for (let i = 0; i < arr.length; i++) {
if (arr[i] === "<") {
moveStackToQueue(queue, stack);
flag = true;
queue.push(arr[i]);
} else if (arr[i] === ">") {
flag = false;
queue.push(arr[i]);
} else if (arr[i] === " ") {
if (!flag) {
moveStackToQueue(queue, stack);
}
queue.push(arr[i]);
} else {
if (flag) queue.push(arr[i]);
else stack.push(arr[i]);
}
}
moveStackToQueue(queue, stack);
return queue.join("");
};
console.log(solution(input));