[백준12904_자바스크립트(javascript)] - A와 B

경이·2024년 10월 23일

𝑩𝑶𝑱 (𝒋𝒔)

목록 보기
230/325

🔴 문제

A와 B


🟡 Sol

const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'Wiki\\input.txt';
const [s, t] = fs
  .readFileSync(path, 'utf-8')
  .trim()
  .split('\n')
  .map((it) => it.split(''));

while (s.length < t.length) {
  if (t.pop() === 'A') continue;

  t.reverse();
}

console.log(Number(s.join('') === t.join('')));

🟢 풀이

⏰ 소요한 시간 : -

이 문제는 S에서 T로 가면 한 단계를 수행할 때마다 지수함수 형태로 값이 커진다.
S의 최소값은 1, T의 최대값은 1,000이니까 이론상 21,000승의 연산을 할 수도 있는 것이다.
따라서 TS로 변환하도록 사고한다. 글고 값의 추가, 삭제, 리버스가 용이하도록 배열로 변환해준다.
문자열 T는 이전단계에서 A를 붙였거나, 문자열을 뒤집고 B를 추가한 값이다.
따라서 맨 뒤에서 A를 빼거나, 맨 뒤에서 B를 빼고 문자열을 뒤집으면 이전 단계가 나온다.

첫 예제를 보자!
ABBA 라는 T는 이전단계에 무조건 A를 붙였을 수 밖에 없다. 따라서 A를 빼주면 이전 단계의 S가 나온다.
ABB 라는 T는 이전단계에 무조건 B를 붙이고 뒤집은 값이다. 따라서 B를 빼주고 문자열을 뒤집어준다.
이런식으로 ST의 길이가 같아질 때까지 연산한 뒤 두 문자열이 같은지 비교해주면 된다.


🔵 Ref

profile
록타르오가르

0개의 댓글