본문 바로가기
알고리즘 풀이/백준

[Gold V] A와 B 2 - 12919 (Java)

by cornsilk-tea 2023. 7. 5.

문제 요약

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

이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다.

  • 문자열의 뒤에 A를 추가한다.
  • 문자열의 뒤에 B를 추가하고 문자열을 뒤집는다.

주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오.


문제 분석

T에서 S로 가는 역순 연산을 그대로 구현한다.


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println(solution(br.readLine(), br.readLine()) ? 1 : 0);
    }

    private static boolean solution(String s, String t) {
        if(t.length() == s.length()){
            return t.equals(s);
        }
        // 문자열 뒤에 A가 있다면 A를 빼준다.
        if(t.endsWith("A") && solution(s, t.substring(0, t.length()-1))){
            return true;
        }
        // 문자열 앞에 B가 있다면, 문자열을 뒤집고 맨 뒤의 B를 빼준다.
        if(t.startsWith("B") && solution(s, new StringBuilder(t.substring(1)).reverse().toString())){
            return true;
        }

        return false;
    }

}

정리

새로 배운 내용

없음

개선할 점

없음

더 찾아볼만한 사항