[BOJ] 12904 A와 B - JAVA

ONE·2022년 4월 14일
0

Baekjoon Online Judge

목록 보기
13/16

📚 Problem

12904 A와 B

📝 Solution

Key Idea

  • A를 추가하는 연산과 문자열을 뒤집고 뒤에 B를 추가하는 연산을 거꾸로 생각한다
  • T 에서 위의 연산들을 거꾸로 실행하여 S가 되는지 검사한다
  • 문자열을 뒤집는 과정은 boolean 을 전역변수로 선언하여 head 쪽이 앞이면 true, tail 쪽이 앞이면 false 로 생각한다
  • T 문자열의 맨뒤에 있는 Char 를 검사하여 A 면 그냥 제거만하고 B 이면 제거를 한 후에 boolean 값을 바꿔준다
  • 연산을 거치다가 T 문자열의 길이와 S 문자열의 길이가 같아졌을 때 equals() 검사를 한다
private static String remove(String T) {
    if(head){
        if (T.charAt(T.length() - 1) == 'B')
            head = false;
        return T.substring(0, T.length() - 1);
    }
    else {
        if (T.charAt(0) == 'B')
            head = true;
        return T.substring(1);
    }
}

💻 Code

import java.util.Scanner;

public class Main {
    private static boolean head;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String S = scanner.next();
        String T = scanner.next();
        head = true;

        while (S.length() < T.length())
            T = remove(T);

        if(!head)
            T = reverse(T);

        if(S.equals(T))
            System.out.println(1);
        else
            System.out.println(0);

        scanner.close();
    }

    private static String remove(String T) {
        if(head){
            if (T.charAt(T.length() - 1) == 'B')
                head = false;
            return T.substring(0, T.length() - 1);
        }
        else {
            if (T.charAt(0) == 'B')
                head = true;
            return T.substring(1);
        }
    }

    private static String reverse(String T) {
        StringBuilder builder = new StringBuilder(T);
        return builder.reverse().toString();
    }
}
profile
New, Strange, Want to try

0개의 댓글