본문 바로가기
코딩/백준-자바

[자바] 백준 12904번: A와 B

by 철없는민물장어 2022. 12. 30.
728x90
반응형

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

 

12904번: A와 B

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

www.acmicpc.net


S문자열로 T를 만들려면 너무 많은 경우의 수가 생긴다.

그래서 반대로 T문자열을 하나씩 줄여서 S가 될 수 있는지 확인하는 방법을 쓰기로 했다.

 

문자열 T가 S와 같은 길이가 될 때 까지 끝에서부터 한 문자씩 뗀다.

끝에있는 문자가 A라면 그냥 떼고

끝에있는 문자가 B라면 뗀 후에 문자열을 뒤집는다.

 

마지막으로 T와 S가 같은 길이가 되었다면

T와 S가 같은 문자열을 나타내는지 확인하고, 

같다면 1 틀리다면 0을 출력한다.

 


import java.util.Scanner;

public class P12904 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		StringBuffer s = new StringBuffer(sc.next());
		StringBuffer t = new StringBuffer(sc.next());
		if (s.length() > t.length()) {
			System.out.println(0);
			return;
		}

		while (s.length() < t.length()) {
			if (t.charAt(t.length() - 1) == 'A')// 끝자리가 A인 경우
			{
				t.deleteCharAt(t.length() - 1); // 끝자리 삭제
			} else if (t.charAt(t.length() - 1) == 'B') {// 끝자리가 B인 경우
				t.deleteCharAt(t.length() - 1); // 끝자리 삭제

				t.reverse();
			}
		}

		if (t.toString().equals(s.toString())) {
			System.out.println(1);
		} else {
			System.out.println(0);
		}

	}

}

StringBuffer는 reverse메소드를 이용해서 아주 간단하게 문자열을 뒤집을 수 있다.

(이걸 모르고 문자열을 하나씩 옮기면서 뒤집으려했다)

 

그리고 equals메소드를 사용할 때 StringBuffer 그대로 사용하게 되면

문자열을 비교하는 것이 아니라 "=="으로 동작하게 된다고 한다.

그래서 toString메소드를 이용하여 String형으로 바꾸고 equals를 사용하였다.

728x90
반응형

댓글