Blog

백준 12904: A와 B를 거꾸로 되돌리기 (Java)

문자열 s를 t로 바꿀 수 있는지 확인하는 문제입니다. 사용할 수 있는 연산은 두 가지입니다.

  1. 문자열 뒤에 A를 추가합니다.
  2. 문자열을 뒤집은 뒤 B를 추가합니다.

이 연산을 반대로 적용했습니다. s에서 가능한 문자열을 늘려 가는 대신, t의 마지막 글자를 보고 직전 문자열로 되돌립니다.

마지막 글자로 되돌릴 연산을 정합니다

A로 끝나면 마지막 A를 지웁니다. B로 끝나면 마지막 B를 지운 뒤 나머지 문자열을 뒤집습니다. 두 번째 연산은 뒤집고 글자를 붙였으므로, 되돌릴 때는 글자를 지우고 뒤집는 순서입니다.

한 번 되돌릴 때마다 길이가 하나씩 줄어들다가 t의 길이가 s와 같아지면 더 줄이지 않고 두 문자열을 비교합니다. 같으면 1, 다르면 0을 출력합니다.

Java
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String s = br.readLine();
        String t = br.readLine();


        while (t.length() > s.length()) {
            if (t.endsWith("A")) {
                t = t.substring(0, t.length() - 1);
            } else if (t.endsWith("B")) {
                t = t.substring(0, t.length() - 1);
                StringBuilder sb = new StringBuilder(t);
                t = sb.reverse().toString();
            }
        }
        bw.write(String.valueOf(s.equals(t) ? 1 : 0));
        bw.flush();
    }
}