문제
풀이
문제에선 S -> T 로 바꿀 수 있는지 확인하라고 했지만 T -> S를 갈 수 있는지 확인하는 것이 더 쉽다
그에 맞게 두 가지 연산도 바꾸어준다
- 문자열 끝의 A를 제거한다 (조건 : 문자열의 끝이 A여야 함)
- 문자열을 뒤집고 끝의 B를 제거한다 (조건 : 뒤집은 문자열의 끝이 B여야함 or 뒤집기 전의 문자열의 첫 문자가 B여야함)
S->T로 변환하며 이미 진행된 연산들을 역으로 다시 연산해주는 것이기 때문에 역연산을 위해서는 각각의 조건이 필요하다
이를 통해 T에 대해 조건들을 재귀적으로 적용해주고 최소 하나의 경우 S에 도달할 수 있으면 S -> T 가 가능한 것
모든 재귀에서 조건을 만족하지 못해 S에 도달하지 못하면 S -> T가 불가능한 것
코드
function solution (input){
let [S,T] = input.split('\n');
let answer = 0;
str = T.split('');
TtoS(str);
function TtoS(str){
if(str.join('')===S){
answer=1;
return ;
}
if(str[0]==='A' && str[str.length-1] === 'B'){
return ;
}
if(str[0]==='B'){
TtoS(str.slice(1).reverse());
}
if(str[str.length-1] === 'A'){
const temp = [...str];
temp.pop();
TtoS(temp);
}
}
console.log(answer);
}
'Algorithm > 문제' 카테고리의 다른 글
baekjoon. 수 찾기 (0) | 2021.07.06 |
---|---|
programmers. 쿼드압축 후 개수 세기 (0) | 2021.07.05 |
baekjoon. 스타트와 링크 (0) | 2021.06.30 |
programmers. 거스름돈 (0) | 2021.06.29 |
백준 readline을 이용한 입/출력 (0) | 2021.06.28 |