본문 바로가기
Problem Solving/Baekjoon

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

by graycode 2022. 7. 29.

 문제 링크

 

12904번: A와 B

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

www.acmicpc.net

 

 풀이 과정

A 에서 B 로 변환하는 과정에서 재귀 호출 함수로 풀이 시

두 가지 연산의 모든 경우의 수를 모두 고려하므로 시간 초과가 발생한다.

 

따라서 B 에서 A 로 변환하여 B 의 끝자리의 문자에 따라 한 가지 경우의 수만 고려하는 방식으로 접근한다.

 

A 문자열을 s, B 문자열을 StringBuilder 객체 t 에 입력받고

연산에 의해 두 문자열의 길이가 같을 때까지 while 문을 수행한다.

t 문자열의 끝자리의 문자에 따라 해당 문자열에 적용되었던 연산을 알 수 있으므로

해당 연산의 반대 순서로 t 문자열에 연산한다.

 

끝으로 두 문자열의 길이가 같을 때 일치 여부에 따라 0 또는 1을 정답으로써 출력한다.

 

• 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

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();
		StringBuilder t = new StringBuilder(br.readLine());

		while (s.length() < t.length()) {
			if (t.charAt(t.length() - 1) == 'A')
				t.deleteCharAt(t.length() - 1);
			else
				t.deleteCharAt(t.length() - 1).reverse();
		}

		int result = 0;
		if (s.equals(t.toString()))
			result = 1;

		bw.write(result + "\n");
		bw.flush();
	}

}

댓글