console.log

[BOJ] 12919 A와 B 2 JAVA 본문

알고리즘/백준

[BOJ] 12919 A와 B 2 JAVA

foresight 2023. 11. 7. 19:23

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