[백준] 12919: A와 B 2 - JAVA
https://www.acmicpc.net/problem/12919
풀이
문자열, 브루트포스 문제이다.
A와 B로만 이루어진 단어들이 있는데
첫번째 주어지는 단어(S)로 두번째 단어(T)를 만들 수 있는지 확인하는 문제이다.
문자열을 바꿀 때는 “문자열의 뒤에 A를 추가한다”, “문자열의 뒤에 B를 추가하고 문자열을 뒤집는다” 이 두가지의 연산이 가능하다.
S에서 T를 만드려면 두 가지 연산을 모두 시도해야 하지만
T에서 S를 만들 때는 문자열의 뒤에 A가 있는지, 문자열의 앞에 B가 있는지 확인하여 그 경우에만 연산을 하면 된다.
문자열을 뒤집는 방법으로는 for문을 이용한 방법과 StringBuilder의 reverse를 이용한 방법이 있다.
String reverse = "";
for (int i = len - 1; i > 0; i--) {
reverse += t.charAt(i);
}
String reverse = new StringBuilder(t).reverse().toString();
위 두가지 방법이 문자열을 뒤집는 방법들이다.
StringBuilder.reverse를 이용한 방법이 더 빨랐다.
메모리: 14280KB
시간: 136ms
언어: Java 11
코드
import java.io.*;
public class Main {
static String S, T;
static int ans;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
S = br.readLine();
T = br.readLine();
ans = 0;
makeS(T);
System.out.println(ans);
}
private static void makeS(String t) {
int len = t.length();
if (len == S.length()) {
if (t.equals(S)) {
ans = 1;
}
return;
}
if (t.endsWith("A")) {
makeS(t.substring(0, len - 1));
}
if (t.startsWith("B")) {
makeS(new StringBuilder(t.substring(1)).reverse().toString());
}
}
}