[BOJ] 12094.A와 B (Java)
by 뚜부니import java.io.*;
import java.util.*;
public class Main {
public static String strReverse(ArrayDeque<Character> deque, boolean isReverse) {
String temp = "";
while(!deque.isEmpty()) {
if (isReverse) { // 뒤집어진 상태
temp += deque.pollLast();
} else {
temp += deque.pollFirst();
}
}
return temp;
}
public static String strRemove(String s, String t) {
int sLen = s.length();
int tLen = t.length();
int count = tLen - sLen; // 규칙을 수행할 횟수
boolean isReverse = false; // 초기에는 뒤집지 않으므로 false 설정
ArrayDeque<Character> deque = new ArrayDeque<>(); // 덱 초기화
for (int i = 0; i < tLen; i++) {
deque.add(t.charAt(i));
}
char c;
while (count-- > 0) {
if (isReverse) // 뒤집어진 상태이므로 앞에서 빼야함
c = deque.pollFirst();
else // 뒤집어지지 않은 상태이므로 뒤에서 빼야함
c = deque.pollLast();
if (c == 'B') // 빼낸 문자열이 B인 경우 뒤집어 줌
isReverse = !isReverse;
}
return strReverse(deque, isReverse);
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
String t = br.readLine();
t = strRemove(s, t);
if (s.equals(t))
System.out.println(1);
else
System.out.println(0);
}
}
이 문제는 문자열 S와 문자열 T가 주어지며, 주어진 규칙을 적용해 S를 T로 바꿀 수 있는지 확인하는 문제입니다.
S를 T로 바꾸려고 하는 것보다 T를 S로 바꿀 수 있는지 확인하는 방법이 더 쉽습니다.
우선 isReverse라는 boolean 변수를 만들어 문자열이 뒤집혔는지 아닌지를 기록합니다.
T의 길이 - S의 길이를 한 횟수만큼 아래의 규칙을 적용합니다.
1. isReverse가 false인 경우, 맨 뒤의 글자를 제거한다.
2. isReverse가 ture인 경우, 맨 앞의 글자를 제거한다.
그 후, isReverse가 false이면 순서대로 출력하고 아니면 반대로 출력하면 됩니다.
이 문제는 AC와 유사한 것 같네요. 😎😎
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 2615.오목 (Java) (0) | 2022.04.21 |
---|---|
[BOJ] 1759.암호만들기 (Java) (0) | 2021.06.20 |
[BOJ] 10159.저울 (Java) (0) | 2021.05.02 |
[BOJ] 1043.거짓말 (Java) (0) | 2021.04.30 |
[BOJ] 5430.AC (Java) (0) | 2021.04.30 |
블로그의 정보
개발하는 두부
뚜부니