
A와 B로만 이루어진 문자열 2개 S 와 T 가 있다.
S 를 다음과 같은 2개의 연산을 이용하여 T 와 똑같이 만들고 싶다.
"A"를 넣는다."B" 를 넣는다. 나는 이 문제를 생각하며 거꾸로 생각하려고 했다.
S 에서 T 와 같아질 때까지 모든 연산을 해보기에는 너무 오래걸릴 것 같았기 때문이다.
그래서 반대로 우리의 목적지인 T 를 S 로 만들고자 했다.
과정은 간단하다.
T 의 마지막이 "A" 라면 popT 의 마지막이 "B" 라면 pop 후에 배열을 뒤집는다.T 의 길이가 S 와 같아질 때까지 반복 T 와 S 를 비교 후 결과 출력전체 풀이
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
// S
const Goal = input.shift();
// T
let MyString = input.shift().split('');
const solution = () => {
// S와 T의 길이가 같아질 때까지 반복
while (MyString.length !== Goal.length) {
// T의 마지막 값
const TOP = MyString[MyString.length - 1];
// T의 마지막 값에 따라 함수 실행
if (TOP === 'A') {
MyString.pop();
} else if (TOP === 'B') {
MyString.pop();
MyString.reverse();
}else {// 그럴일은 없겠지만 만약 끝이 A나 B 둘다 아닐 경우
return 0;
}
}
// 결과 출력
return MyString.join('') === Goal ? 1 : 0;
};
console.log(solution());
생각보다 너무 쉽게 풀려서 당황스러웠다. 최근들어 문자열 문제를 풀면서 처음 접하는 알고리즘을 많이 봐서 더욱 그렇게 느꼈던 것 같다.