문제 설명

S는 알파벳으로 이루어진 문자열입니다.
순서대로 문자열을 확인하여, 해당 문자열에서 2회 연속으로 동일한 문자가 나타나면, 해당 두 문자를 소거합니다.
소거한뒤에 나온 문자열에서 다시 연속해서 나오는 알파벳을 소거하는 작업을 더 이상 작업할 것이 없을 때까지 반복합니다.
이때 최종 문자열이 완전히 소거되어 빈 문자열이라면 1을 반환하고, 알파벳이 남아있으면 0을 반환하는 프로그램을 구현하세요.


입력 형식

· S: 알파벳으로 이루어진 문자열


출력 형식

· 문자열 소거를 반복한 후 빈 문자열 여부를 1 또는 0의 정수로 반환


제약 사항

· 0 < S.length <= 100


입출력 예시

· 입력
  · S = "ABBA"
· 출력 : 1
· 설명: "ABBA" →  "AA" → "" 와 같이 빈 문자열이 되므로 1을 반환


작성 코드

(20/20)

import java.util.Stack;

class Solution {
    public int solution(String S) {
        int answer = 0;
        Stack<Character> word = new Stack<>();

        // S 문자열을 char 배열로 변환하고, 배열의 모든 요소에 대해 반복문을 실행한다.
        for (char i : S.toCharArray()) {
            // word 스택이 비어있거나 스택의 맨 위 요소와 현재 문자 i가 다를 경우 i를 push
            if(word.isEmpty() || word.peek() != i) word.push(i);
            else word.pop();
        }
        if(word.isEmpty()) answer = 1;
        return answer;
    }

    public static void main(String[] args) {
        Solution st = new Solution();
        String S = "ABBA";
        System.out.println(st.solution(S));
    }
}

 

정답 코드

import java.util.ArrayList;
import java.util.List;

class Solution {
    public int solution(String S) {
        List<Character> chars = new ArrayList<>();

        for (int i = 0; i < S.length(); i++) {
            if (!chars.isEmpty() && 
            chars.get(chars.size() - 1) == S.charAt(i)) {
                chars.remove(chars.size() - 1);
                continue;
            }

            chars.add(S.charAt(i));
        }

        if (chars.isEmpty()) {
            return 1;
        }

        return 0;
    }
}