console.log
[BOJ] 12919 A와 B 2 JAVA 본문
https://www.acmicpc.net/problem/12919
12919번: A와 B 2
수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수빈
www.acmicpc.net
메모리 : 13,240kb
실행시간 : 88ms
문제분석
DFS
A와 B(1) 이랑 유사하게 완성된 글자를 처음 글자로 만들기
가능한 경우의 수가 2가지 이므로 DFS
걸린시간
30분 ⏱️
풀이방법
- T를 S로 만들기
- 맨 첫 글자가 B : 글자 뒤집고 맨 뒷 글자 remove
- 맨 뒷 글자가 A : 맨 뒷 글자 remove
포인트
T를 S로 만들기
코드
package study.day1020;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BOJ_12919_A와B2 { // 메모리 : 13,240 kb 실행시간 : 88 ms
static boolean flag;
static String S;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
S = br.readLine();
String[] T = br.readLine().split("");
List<String> list = new ArrayList<>();
for (String str : T) {
list.add(str);
}
dfs(list);
System.out.println(0);
}
private static void dfs(List<String> list) {
if(list.size() <= S.length()) {
String temp = "";
for (String str : list) {
temp += str;
}
if(temp.equals(S)) {
System.out.println(1);
System.exit(0);
}
return;
}
if(list.get(0).equals("B")) {
Collections.reverse(list);
String cup = list.get(list.size() - 1);
list.remove(list.size() - 1);
dfs(list);
list.add(cup);
Collections.reverse(list);
}
if(list.get(list.size() - 1).equals("A")) {
String cup = list.get(list.size() - 1);
list.remove(list.size() - 1);
dfs(list);
list.add(cup);
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 1806 부분합 JAVA (1) | 2023.11.04 |
---|---|
[BOJ] 4485 녹색 옷 입은 애가 젤다지? JAVA (1) | 2023.10.29 |
[BOJ] 13549 숨바꼭질 3 JAVA (0) | 2023.10.26 |
[BOJ] 1238 파티 JAVA (0) | 2023.10.24 |
[BOJ] 1342 행운의 문자열 JAVA (1) | 2023.10.04 |