본문으로 바로가기

baekjoon. A와 B 2

category Algorithm/문제 2021. 7. 2. 14:32

문제

링크

 

12919번: A와 B 2

수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈

www.acmicpc.net

풀이

문제에선 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