Algorithm, Problem Solving/백준(boj)

[백준][Java] 12904 - A와 B

태오님 2023. 3. 29.

목차

     

    문제 정보

    https://www.acmicpc.net/problem/12904

     

    12904번: A와 B

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

    www.acmicpc.net

    난이도 : G5

    유형 : 그리디, 문자열


    문제 풀이

    문자열을 변환하는 방법은 2가지밖에 없다

    1. 마지막에 A를 추가

    2. 거꾸로 만든 후 B를 추가

     

    S문자열에 1, 2번 연산을 어떻게 처리해도 결국 마지막에 A 혹은 B만 올 수 있다.

    그럼 T 문자열을 기준으로 보자

     

    1. T의 문자열 마지막이 A이면 1번 연산이 진행된 것이고

    2. T의 문자열 마지막이 B이면 2번 연산이 진행된 것이므로 

     

    결국 T의 마지막 문자에 맞는 변환과정을 거꾸로 진행하면 S와 동일해지는지 확인할 수 있다.

     

     

    T는 거꾸로 변환시키는 과정을 편하게 하기 위해서 StringBuilder로 선언하였다.


    코드

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class Main {
    
        private String S;
        private StringBuilder T;
    
        public void solution() throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
            S = br.readLine();
            T = new StringBuilder(br.readLine());
    
            while (T.length() > S.length()) {
                char last = T.charAt(T.length() - 1);
                T = T.deleteCharAt(T.length() - 1);
    
                if (last == 'B') {
                    T.reverse();
                }
            }
    
            if (T.toString().equals(S)) {
                System.out.println(1);
            } else {
                System.out.println(0);
            }
        }
    
        public static void main(String[] args) throws IOException {
            new Main().solution();
        }
    }

    댓글