Live Today
[백준] 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
💡 이 문제의 키포인트는 S를 T로 바꿀 수 있는가의 로직이 아니라 T를 S로 바꿀 수 있는지 확인해야 시간초과가 나지 않는다.
💡시간 초과 난 풀이는 S를 가지고 알파벳 “A” 와 “B”를 추가해가며 dfs로 풀었다.
📍Java 문자열 자르기 - substring()
String str = "Hello";
str.substring(1); // ello
str.substring(1,4); // ell : 4번째 문자열 포함 XXXXX
- substring(startIdx, endIdx) 인 경우 마지막 인덱스는 포함하지 않는다 !!!!!!!
✅ 정답 풀이
package algo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main_bj_12919_A와B2 {
static String S,T;
static int result;
static StringBuilder sb;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
S = br.readLine();
T = br.readLine();
dfs(T);
System.out.println(result);
}
private static void dfs(String temp) {
if(temp.length() == S.length()) {
if(temp.equals(S)) {
result = 1;
}
return;
}
// 첫번째 문자가 B라면 첫번째 문자 이후부터 자르고 문자열 뒤집기
if(temp.charAt(0) == 'B') {
sb = new StringBuilder(temp.substring(1)).reverse();
dfs(sb.toString());
}
// 마지막 문자가 A라면 첫번째 문자부터 마지막 문자 바로 이전까지 자른다.
if(temp.charAt(temp.length()-1) == 'A') {
String s = temp.substring(0,temp.length()-1);
dfs(s);
}
}
}
❌ 틀린 풀이
package algo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main_bj_12919_A와B2 {
static String S,T;
static int result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
S = br.readLine();
T = br.readLine();
dfs(S);
System.out.println(result);
}
private static void dfs(String temp) {
if(temp.length() == T.length()) {
if(temp.equals(T)) {
result = 1;
}
return;
}
String s = temp + "A";
// System.out.print(s+" ");
dfs(s);
String s2 = "B";
for(int i=temp.length()-1;i>=0;i--) {
s2 += temp.charAt(i)+"";
}
// System.out.print(s2+"\n");
dfs(s2);
}
}
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준] 2902. KMP는 왜 KMP일까? (Java) (0) | 2023.02.12 |
---|---|
[백준] 1445. 일요일 아침의 데이트 (Java) (0) | 2023.02.05 |
[백준] 2493. 탑 (Java) (0) | 2023.02.04 |
[백준] 1253. 좋다 (Java) (0) | 2023.01.25 |
[백준]17837. 새로운 게임2 (Java) (0) | 2023.01.24 |