console.log

[BOJ] 12904 A와 B JAVA 본문

알고리즘/백준

[BOJ] 12904 A와 B JAVA

foresight 2023. 9. 19. 14:31

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