문제 요약
수빈이는 A와 B로만 이루어진 영어 단어 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다.
이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다.
- 문자열의 뒤에 A를 추가한다.
- 문자열의 뒤에 B를 추가하고 문자열을 뒤집는다.
주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오.
문제 분석
T에서 S로 가는 역순 연산을 그대로 구현한다.
코드
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));
System.out.println(solution(br.readLine(), br.readLine()) ? 1 : 0);
}
private static boolean solution(String s, String t) {
if(t.length() == s.length()){
return t.equals(s);
}
// 문자열 뒤에 A가 있다면 A를 빼준다.
if(t.endsWith("A") && solution(s, t.substring(0, t.length()-1))){
return true;
}
// 문자열 앞에 B가 있다면, 문자열을 뒤집고 맨 뒤의 B를 빼준다.
if(t.startsWith("B") && solution(s, new StringBuilder(t.substring(1)).reverse().toString())){
return true;
}
return false;
}
}
정리
새로 배운 내용
없음
개선할 점
없음
더 찾아볼만한 사항
없
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[Silver I] 지름길 - 1446 (Java) (0) | 2023.07.11 |
---|---|
[Gold IV] 공유기 설치 - 2110 (Java) (0) | 2023.07.05 |
[Silver IV] 점화식 - 13699 (JAVA) (0) | 2023.07.03 |
[Gold IV] 주난의 난(難) - 14497 (JAVA) (0) | 2023.07.01 |
[Silver I] 회전 초밥 - 2531 (JAVA) (0) | 2023.07.01 |