[백준5397_자바스크립트(javascript)] - 키로거

경이·2024년 6월 17일

𝑩𝑶𝑱 (𝒋𝒔)

목록 보기
72/325

🔴 문제

키로거


🟡 Sol

const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'Wiki\\input.txt';
const [T, ...input] = fs.readFileSync(path).toString().trim().split('\n');
const alphaRegex = /^[a-zA-Z0-9]$/;

function getPassword(input) {
  const left = [];
  const right = [];

  for (let i = 0; i < input.length; i++) {
    const target = input[i];
    if (target === '<' && left.length > 0) right.push(left.pop());
    else if (target === '>' && right.length > 0) left.push(right.pop());
    else if (target === '-' && left.length > 0) left.pop();
    else if (alphaRegex.test(target)) left.push(target);
  }

  return left.concat(right.reverse()).join('');
}

input.forEach((it) => console.log(getPassword([...it])));

🟢 풀이

테스트케이스가 여러개므로 비밀번호를 얻는 로직을 함수로 분리했다.
현재 커서를 기준으로 왼쪽 배열 오른쪽 배열을 만들어줬고, 입력받은 문자열을 순회하면서 < 이면 왼쪽으로 보내고 >이면 오른쪽으로 보낸다.
-라면 왼쪽의 가장 끝 요소를 제거하고 올바른 알파벳이 입력되었다면 왼쪽에 추가한다.
반복이 다 끝나면 왼쪽 요소와 오른쪽 요소를 합쳐서 하나의 문자열로 만들어 주면된다. 이때 오른쪽 요소는 reverse 해줘야 한다.


🔵 Ref

profile
록타르오가르

0개의 댓글