백준 1406 에디터 (NodeJs)

박태준·2019년 12월 28일
0

left, right 배열을 만들고 배열을 스택처럼 사용
커서의 왼쪽은 left 배열, 오른쪽은 right 배열로 push()함
상황에 맞게 조건문 정의
반복문 완료 후 right 배열에 있는 원소들을 pop()으로 left 배열에 push()함
left.join()을 사용해서 배열의 원소들을 문자열로 변환

주의사항

for (let i = 2; i < inputLength; i++) {
  if (input[i][0] === "L") {
    if (left.length !== 0) {
      right.unshift(left.pop());
    }
  } else if (input[i][0] === "D") {
    if (right.length !== 0) {
      left.push(right.shift());
    }
  } else if (input[i][0] === "B") {
    if (left.length !== 0) {
      left.pop();
    }
  } else if (input[i][0] === "P") {
    left.push(input[i][2]);
  }
}

pop(), push() 대신 shift(), unshift()를 사용시 시간초과 발생

풀이 코드

let input = [];
var require = require("readline")

.createInterface(process.stdin, process.stdout)
.on("line", function(line) {
input.push(line.trim());
})
.on("close", function() {

	const inputLength = input.length;
	const wordLength = input[0].length;
	let left = [];
	let right = [];

	for (let i = 0; i < wordLength; i++) {
  		left.push(input[0][i]);
	}

	for (let i = 2; i < inputLength; i++) {
  		if (input[i][0] === "L") {
    		if (left.length) {
      			right.push(left.pop());
    		}
  		} 
        else if (input[i][0] === "D") {
    		if (right.length) {
      			left.push(right.pop());
    		}
  		} 
        else if (input[i][0] === "B") {
    		if (left.length) {
      			left.pop();
    		}
  		} 
        else if (input[i][0] === "P") {
    		left.push(input[i][2]);
  		}
	}

	while (right.length) {
  		left.push(right.pop());
	}

	console.log(left.join(""));

});

profile
js개발 블로그

0개의 댓글