• 문제 링크
12904번: A와 B
수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수
www.acmicpc.net
• 풀이 과정
A 에서 B 로 변환하는 과정에서 재귀 호출 함수로 풀이 시
두 가지 연산의 모든 경우의 수를 모두 고려하므로 시간 초과가 발생한다.
따라서 B 에서 A 로 변환하여 B 의 끝자리의 문자에 따라 한 가지 경우의 수만 고려하는 방식으로 접근한다.
A 문자열을 s, B 문자열을 StringBuilder 객체 t 에 입력받고
연산에 의해 두 문자열의 길이가 같을 때까지 while 문을 수행한다.
t 문자열의 끝자리의 문자에 따라 해당 문자열에 적용되었던 연산을 알 수 있으므로
해당 연산의 반대 순서로 t 문자열에 연산한다.
끝으로 두 문자열의 길이가 같을 때 일치 여부에 따라 0 또는 1을 정답으로써 출력한다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String s = br.readLine();
StringBuilder t = new StringBuilder(br.readLine());
while (s.length() < t.length()) {
if (t.charAt(t.length() - 1) == 'A')
t.deleteCharAt(t.length() - 1);
else
t.deleteCharAt(t.length() - 1).reverse();
}
int result = 0;
if (s.equals(t.toString()))
result = 1;
bw.write(result + "\n");
bw.flush();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 16922 로마 숫자 만들기 - Backtracking / Java (0) | 2022.07.31 |
---|---|
[백준] 1744 수 묶기 - Greedy / Java (0) | 2022.07.30 |
[백준] 1285 동전 뒤집기 - Greedy / Java (0) | 2022.07.28 |
[백준] 2138 전구와 스위치 - Greedy / Java (0) | 2022.07.27 |
[백준] 1080 행렬 - Greedy / Java (0) | 2022.07.26 |
댓글