알고리즘/문제풀이

[JavaScript][node.js] 백준 1406 에디터

2024. 2. 1. 17:18
목차
  1. 문제
  2. 풀이과정
  3. 최종코드

문제

https://www.acmicpc.net/problem/1406

 

1406번: 에디터

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수

www.acmicpc.net

 

풀이과정

💡 아이디어
실제 cursor 변수를 다룬다고 생각하지 말고, cursor의 왼쪽과 오른쪽에 있어야 할 문자열을 stack으로 관리한다.

 

명령어 L : 커서를 왼쪽으로 한 칸 옮김 (커서가 문장의 맨 앞이면 무시됨)

  if (c === 'L') {
    if (cursor_left.length) {
      const top = cursor_left.pop();
      cursor_right.push(top);
    }
  }
  • 커서가 문장의 맨 앞 🟰 커서의 왼쪽에 위치하는 문자가 없음 🟰 커서의 왼쪽에 들어갈 문자열 스택인 cursor_left 배열 길이가 0
  • 커서가 왼쪽으로 이동 🟰 커서의 바로 앞 문자가 커서의 바로 뒤로 이동
  • cursor_left 배열의 마지막 원소를 cursor_right 배열로 옮긴다.
  • 이때, 원소가 cursor_right 가장 앞이 아니라 가장 뒤로 들어가는 것에 주의하자. (stack)

명령어 D : 커서를 오른쪽으로 한 칸 옮김 (커서가 문장의 맨 뒤이면 무시됨)

else if (c === 'D') {
    if (cursor_right.length) {
      const bottom = cursor_right.pop();
      cursor_left.push(bottom);
    }
  }
  • 커서가 문장의 맨 뒤 🟰 커서의 오른쪽에 위치하는 문자가 없음 🟰 커서의 오른쪽에 들어갈 문자열 스택인 cursor_right 배열 길이가 0
  • 커서가 오른쪽으로 이동 🟰 커서의 바로 뒤 문자가 커서의 바로 앞으로 이동
  • cursor_right 배열의 마지막 원소를 cursor_left 배열로 옮긴다.
  • cursor_right 배열의 가장 마지막 원소는 곧 커서 오른쪽 실제 문자열의 가장 앞쪽 문자이다.

명령어 B, P $

  • cursor_left 배열에서 추가 및 삭제해주면 된다.

 

최종코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';

const input = fs.readFileSync(filePath).toString().trim().split('\n');
const str = input[0];
const n = +input[1];
const commands = input.slice(2).map((item) => item.split(' '));

const cursor_left = str.split('');
const cursor_right = [];

commands.forEach((command) => {
  const c = command[0];

  if (c === 'L') {
    if (cursor_left.length) {
      const top = cursor_left.pop();
      cursor_right.push(top);
    }
  } else if (c === 'D') {
    if (cursor_right.length) {
      const bottom = cursor_right.pop();
      cursor_left.push(bottom);
    }
  } else if (c === 'B') {
    if (cursor_left.length) {
      cursor_left.pop();
    }
  } else {
    const v = command[1];
    cursor_left.push(v);
  }
});

const answer = cursor_left.join('') + cursor_right.reverse().join('');
console.log(answer);

'알고리즘 > 문제풀이' 카테고리의 다른 글

[JavaScript][node.js] 백준 1327 소트 게임  (1) 2024.02.09
[JavaScript][node.js] 프로그래머스 피로도  (2) 2024.02.07
[JavaScript][node.js] 백준 11053 가장 긴 증가하는 부분 수열  (1) 2024.01.26
[JavaScript][node.js] 백준 14940 쉬운 최단거리  (0) 2024.01.09
[JavaScript][node.js] 백준 18111 마인크래프트  (0) 2024.01.08
  1. 문제
  2. 풀이과정
  3. 최종코드
'알고리즘/문제풀이' 카테고리의 다른 글
  • [JavaScript][node.js] 백준 1327 소트 게임
  • [JavaScript][node.js] 프로그래머스 피로도
  • [JavaScript][node.js] 백준 11053 가장 긴 증가하는 부분 수열
  • [JavaScript][node.js] 백준 14940 쉬운 최단거리
햄oOoOo
햄oOoOo
FE
햄oOoOo
디자인보다 개발이 더 좋아
햄oOoOo
전체
오늘
어제
  • 분류 전체보기 (75)
    • 프로젝트 (6)
      • 소프티어 부트캠프 (1)
      • GDSC (0)
      • FRONTLINE (2)
      • 우테코 프리코스 (3)
    • TIL (47)
      • Git (2)
      • Web (5)
      • 디자인시스템 (2)
      • HTML + CSS (3)
      • JavaScript (9)
      • TypeScript (5)
      • React (6)
      • Node.js (1)
      • 테스트 (2)
      • 디자인패턴 (1)
      • 네트워크 (9)
      • 운영체제 (1)
      • DevOps (1)
      • ETC (0)
    • 알고리즘 (19)
      • 문제풀이 (7)
      • 자료구조 (3)
      • 알고리즘 개념 (6)
      • 코딩테스트 (3)
    • 개발일기 (3)
    • 회사일기 (0)

인기 글

태그

  • 우테코
  • Typescript
  • HTTP
  • 알고리즘
  • 실행 컨텍스트
  • 브라우저 렌더링
  • 웹 접근성
  • javascript
  • 프로토타입 체인
  • 네트워크
  • useEffect
  • 모든 개발자를 위한 HTTP 웹 기본 지식
  • React
  • node.js
  • 이펙티브 타입스크립트
  • bfs
  • virtual DOM
  • 렌더링
  • Stack
  • 렉시컬 환경
hELLO · Designed By 정상우.
햄oOoOo
[JavaScript][node.js] 백준 1406 에디터
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.