728x90
https://www.acmicpc.net/problem/12904
S문자열로 T를 만들려면 너무 많은 경우의 수가 생긴다.
그래서 반대로 T문자열을 하나씩 줄여서 S가 될 수 있는지 확인하는 방법을 쓰기로 했다.
문자열 T가 S와 같은 길이가 될 때 까지 끝에서부터 한 문자씩 뗀다.
끝에있는 문자가 A라면 그냥 떼고
끝에있는 문자가 B라면 뗀 후에 문자열을 뒤집는다.
마지막으로 T와 S가 같은 길이가 되었다면
T와 S가 같은 문자열을 나타내는지 확인하고,
같다면 1 틀리다면 0을 출력한다.
import java.util.Scanner;
public class P12904 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuffer s = new StringBuffer(sc.next());
StringBuffer t = new StringBuffer(sc.next());
if (s.length() > t.length()) {
System.out.println(0);
return;
}
while (s.length() < t.length()) {
if (t.charAt(t.length() - 1) == 'A')// 끝자리가 A인 경우
{
t.deleteCharAt(t.length() - 1); // 끝자리 삭제
} else if (t.charAt(t.length() - 1) == 'B') {// 끝자리가 B인 경우
t.deleteCharAt(t.length() - 1); // 끝자리 삭제
t.reverse();
}
}
if (t.toString().equals(s.toString())) {
System.out.println(1);
} else {
System.out.println(0);
}
}
}
StringBuffer는 reverse메소드를 이용해서 아주 간단하게 문자열을 뒤집을 수 있다.
(이걸 모르고 문자열을 하나씩 옮기면서 뒤집으려했다)
그리고 equals메소드를 사용할 때 StringBuffer 그대로 사용하게 되면
문자열을 비교하는 것이 아니라 "=="으로 동작하게 된다고 한다.
그래서 toString메소드를 이용하여 String형으로 바꾸고 equals를 사용하였다.
728x90
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 1049번: 기타줄 (0) | 2022.12.31 |
---|---|
[자바] 백준 16953번: A -> B (0) | 2022.12.30 |
[자바] 백준 24479번: 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2022.12.30 |
[자바] 백준 1929번: 소수 구하기 (0) | 2022.12.30 |
[자바] 백준 1931번: 회의실 배정 (1) | 2022.12.29 |
댓글