개발하는 두부

[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);
    }
}
 

12904번: A와 B

수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수

www.acmicpc.net

 

이 문제는 문자열 S와 문자열 T가 주어지며, 주어진 규칙을 적용해 S를 T로 바꿀 수 있는지 확인하는 문제입니다.

S를 T로 바꾸려고 하는 것보다 T를 S로 바꿀 수 있는지 확인하는 방법이 더 쉽습니다.

 

우선 isReverse라는 boolean 변수를 만들어 문자열이 뒤집혔는지 아닌지를 기록합니다.

T의 길이 - S의 길이를 한 횟수만큼 아래의 규칙을 적용합니다.

1. isReverse가 false인 경우, 맨 뒤의 글자를 제거한다.

2. isReverse가 ture인 경우, 맨 앞의 글자를 제거한다.

그 후, isReverse가 false이면 순서대로 출력하고 아니면 반대로 출력하면 됩니다.

 

 

 

이 문제는 AC와 유사한 것 같네요. 😎😎

👉 AC 문제 풀러 가기

👉 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

블로그의 정보

개발하는 두부

뚜부니

활동하기