본문 바로가기

Algorithm/Practice

Programmers - 짝지어 제거하기 with JAVA

 

 

문제

소문자로 이루어진 문자열이 주어지고 같은 글자를 짝지어 삭제하여 모든 문자열을 삭제가능한지를 확인하는 문제이다.

 

 

해결

스택을 해결하여 간단히 해결가능하다.

예를들어, baabaa가 있을 때,

처음에는 b를 넣는다.

그 이 후, a를 넣는데, 스택에 마지막 값과 비교해 같으면 넣지 않고 마지막 인덱스를 제거하고 다르면 넣는다

따라서, a는 들어간다.

그 이 후, a가 제거되므로 b만 남는데, 이 후, b가 들어오므로 모두 제거된다.

이런식으로 해결해 결과적으로 스택이 모두 비면 1 아니면 0을 반환한다.

 

 

코드

import java.util.*;
class Solution{
    public int solution(String s){
        if(s.length() == 0 | s.length() == 1){
            return 0;
        }
        char[] s_char = s.toCharArray();
        List<Character> stack = new ArrayList<>();
        stack.add(s_char[0]);
        for(int i=1; i<s_char.length; i++){
            int now = stack.size()-1;
            if(now < 0){
                stack.add(s_char[i]);
                continue;
            }
            if(s_char[i] == stack.get(now)){
                stack.remove(now);
                continue;
            }
            stack.add(s_char[i]);
        }
        if(stack.size() == 0){
            return 1;
        }
        return 0;
    }
}