문제 링크
https://www.acmicpc.net/problem/12904
문제 해설
A와 B로만 이루어진 영어 단어가 존재한다.
두 문자열(S, T) 가 주어질 때, S를 T로 바꿀 수 있는 지 판별한다.
문자열을 바꾸기 위한 연산은 다음과 같다.
1. 문자열의 뒤에 A를 추가한다.
2. 문자열을 뒤집고 뒤에 B를 추가한다.
예시
B
ABBA
B가 ABBA 가 되기 위해선 B, BA, ABB, ABBA 과정을 거치며, 최종적으로 ABBA가 됐으므로, 1을 리턴한다.
만약 변경하지 못할 경우, 0을 리턴한다.
❌ 문제 접근 1
연산의 종류는 2가지이다. 따라서 연산 (1) 과 연산 (2)를 적용했을 때 다음과 같이 트리 형태로 나타낼 수 있다.
시간 복잡도는 O(2^N)이 될것이고, 제한조건에 N은 1000자리이하라고 나와있으니, 시간 초과이다.

⭕ 문제 접근
1️⃣ ABBA 직전의 문자열은 어떤것이였을까?
- ABBA : 마지막 문자가 'A' 이기 때문에 첫번째 연산을 한 결과일 것이다.
- ABB + 'A' = > ABBA
- 따라서 직전 문자열은 ABB이다.
2️⃣ ABB 직전의 문자열
- ABB : 마지막 문자가 'B' 이기 때문에 두번째 연산을 한 결과일 것이다.
- BA -> AB + 'B => ABB
- 따라서 직전 문자열은 AB이다.
전체 코드
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin.txt", "utf8").trim().split("\n");
const s1 = input[0];
let s2 = input[1];
let canBe = false;
while (s1.length <= s2.length) {
if (s1 === s2) {
canBe = true;
break;
}
if (s2[s2.length - 1] === "A") {
s2 = s2.slice(0, s2.length - 1);
} else {
s2 = s2.slice(0, s2.length - 1);
s2 = s2.split("").reverse().join("");
}
}
console.log(canBe ? 1 : 0);
'Algorithm' 카테고리의 다른 글
[JavaScript] 백준 2294. 동전2 (0) | 2025.04.02 |
---|---|
[JavaScript] 1446. 지름길 (1) | 2025.03.26 |
[JavaScript] 구간 합 구하기 5 (1) | 2025.03.21 |
[Javascript] 백준 1018. 체스판 다시 칠하기 (1) | 2025.03.14 |
[JavaScript] 백준 1535. 안녕 (1) | 2025.03.12 |