BOJ 12904 A와 B
BOJ 12904 A와 B
https://www.acmicpc.net/problem/12904
문제
수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다.
이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다.
- 문자열의 뒤에 A를 추가한다.
- 문자열을 뒤집고 뒤에 B를 추가한다.
주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오.
입력
첫째 줄에 S가 둘째 줄에 T가 주어진다. (1 ≤ S의 길이 ≤ 999, 2 ≤ T의 길이 ≤ 1000, S의 길이 < T의 길이)
출력
S를 T로 바꿀 수 있으면 1을 없으면 0을 출력한다.
예제 입력 1
B ABBA
예제 출력 1
1
예제 입력 2
AB ABB
예제 출력 2
0
코드
이전에도 비슷한 문제를 풀었던 것 같아서 찾아봤더니 BOJ 12919 A와 B 2를 풀었던 적이 있었다.
이전 문제와 다른 점은 문자 B에 대한 연산 방식이다.
이전 문제는 문자열 뒤에 B를 추가하고 문자열을 뒤집는 것인 반면, 이번 문제는 문자열을 뒤집고 B를 추가하는 연산 방식이었다.
풀이 방법은 거의 비슷하게 구현했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String S = br.readLine();
String T = br.readLine();
boolean result = isAbleToChange(S, T);
if(result) {
System.out.println(1);
return;
}
System.out.println(0);
}
static boolean isAbleToChange(String S, String T) {
StringBuilder changing = new StringBuilder(T);
while (changing.length() != S.length()) {
int checkIdx = changing.length() - 1;
boolean isReversed = changing.charAt(checkIdx) == 'B';
changing.deleteCharAt(checkIdx);
if(isReversed) {
changing.reverse();
}
}
if(changing.toString().equals(S)) {
return true;
}
return false;
}
}
This post is licensed under CC BY 4.0 by the author.