새소식

Algorithm/BOJ

(JAVA) [BOJ]백준 12904번, A와 B

  • -
728x90

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

 

12904번: A와 B

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

www.acmicpc.net

12904, A와 B

이번 문제는 역으로 해결해 나가면 쉽게 풀 수 있다.

Process

main

: 조건이 2개가 있다.

1. 문자열의 뒤에 A를 추가한다.

2. 문자열을 뒤집고 뒤에 B를 추가한다.

주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지를 판단하는 문제이다.

이 조건을 반대로 생각해보자.

 

주어진 B의 텍스트에1. 문자열의 뒤에 A가 있다면 A를 제거한다.2. 문자열의 뒤에 B가 있다면 B를 제거하고 문자열을 reverse()한다.이 조건을 B 텍스트의 길이가 A의 길이보다 큰 경우 반복한다.

 

코드에 자세한 주석을 달아두었다.

// T의 길이가 S보다 작아질 경우 종료
while(T.length() >= S.length())
{
    // 마지막 글자 확인
    if(T.charAt(T.length()-1) == 'A')
    {
        // 마지막 글자인 A제거 
        T = T.substring(0, T.length()-1);
    }
    else if(T.charAt(T.length()-1) == 'B')
    {
        // 마지막 글자인 B제거 후, 문자열 reverse
        T = T.substring(0, T.length()-1);
        StringBuffer sb = new StringBuffer(T);
        T = sb.reverse().toString();
    }

    if(T.equals(S))
    {
        System.out.println(1);
        return;
    }
}
System.out.println(0);

T.length() >= S.length() 의 경우에 반복하며 변환해가는 T의 길이가 S의 길이보다 작아지면 루프를 종료한다.

 

마지막 글자를 확인해가며 위의 조건을 반복하고 T 와 S가 같다면 1을 출력, 같지 않은 상태로 루프를 종료한다면 0을 출력하면 된다.

 

전체 코드는 아래와 같다.

static FastReader scan = new FastReader();
static StringBuilder sb = new StringBuilder();
static String S,T;

static void input() 
{
    S = scan.nextLine(); T = scan.nextLine();
}

static void pro() 
{
    // T의 길이가 S보다 작아질 경우 종료
   while(T.length() >= S.length())
   {
        // 마지막 글자 확인
        if(T.charAt(T.length()-1) == 'A')
        {
            // 마지막 글자인 A제거 
            T = T.substring(0, T.length()-1);
        }
        else if(T.charAt(T.length()-1) == 'B')
        {
            // 마지막 글자인 B제거 후, 문자열 reverse
            T = T.substring(0, T.length()-1);
            StringBuffer sb = new StringBuffer(T);
            T = sb.reverse().toString();
        }

        if(T.equals(S))
        {
            System.out.println(1);
            return;
        }
   }
   System.out.println(0);
}

public static void main(String[] args) 
{
    input();
    pro();
}

 

 

급하게 조사하고 정리하다보니 부족하거나 틀린 내용이 있을 수도 있는데 댓글로 달아주시면 감사하겠습니다!

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.