console.log
[BOJ] 12904 A와 B JAVA 본문
https://www.acmicpc.net/problem/12904
12904번: A와 B
수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수
www.acmicpc.net
메모리 : 13260 kb
실행시간 : 144 ms
문제분석
S를 T로 만드는게 아니라
T를 S로 만들어보자 !
걸린시간
30분 ⏱️
풀이방법
t를 s로 만든다
1. t의 끝이 A일 경우 A만 삭제
2. t의 끝이 B일 경우 B삭제 후 문자 뒤집기
3. 역으로 계산하며 마지막에 t와 s가 같으면 result = 1
포인트
보통 이런 문제는 초기 상태에서 시작하면 경우의 수가 너무 방대해진다
따라서, 결과에서 초기 상태로 수렴하는 게 포인트 !!!!!
코드
package study.day0811;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
public class BOJ_12904_A와B {
static int result = 0; // 결과값 0으로 초기화
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// s 입력받기
String[] temp = br.readLine().split("");
ArrayList<String> s = new ArrayList<>();
for (int i = 0; i < temp.length; i++) {
s.add(temp[i]);
}
// t 입력받기
temp = br.readLine().split("");
ArrayList<String> t = new ArrayList<>();
for (int i = 0; i < temp.length; i++) {
t.add(temp[i]);
}
String str; // 스왑하기 위한 저장 변수
while(s.size() < t.size()) { // s와 t의 길이가 같아질 때까지 반복
if(t.get(t.size()-1).equals("A")) { // t의 맨 끝이 A일 경우
t.remove(t.size() - 1); // A만 삭제
}else { // t의 맨 끝이 B일 경우
t.remove(t.size() - 1); // B 삭제 후
for (int i = 0; i < t.size()/2; i++) { // 문자 뒤집기
str = t.get(i);
t.set(i, t.get(t.size() - 1 - i));
t.set(t.size() - 1 - i, str);
}
}
}
if(Arrays.equals(s.toArray(), t.toArray())) result = 1; // s와 t가 같으면 result를 1로 변경
System.out.println(result);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 16637 괄호 추가하기 JAVA (0) | 2023.10.01 |
---|---|
[BOJ] 14891 톱니바퀴 JAVA (0) | 2023.09.25 |
[BOJ] 1759 암호 만들기 JAVA (0) | 2023.09.24 |
[BOJ] 1790 수 이어 쓰기 2 JAVA (0) | 2023.09.15 |
[BOJ] 2800 괄호 제거 JAVA (0) | 2023.08.31 |