문제
https://www.acmicpc.net/problem/1406
풀이과정
💡 아이디어
실제 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] 프로그래머스 피로도 (1) | 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 |