단어 뒤집기 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));