짝지어 제거하기
문제정의
연달아 등장하는 알파벳을 짝지어 삭제한다고 할 때, 모든 문자열을 삭제할 수 있는지 확인하는 문제이다.
문제풀이
전체 코드는 다음과 같다. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32package level2;
import java.util.Stack;
public class PairRemove {
    //프로그래머스 문제풀이 Level2 짝지어 제거하기
    public static void main(String[] args) {
        String s = "baabaa";
        int answer = 0;
        Stack<Character> stack = new Stack<>();
        
        for(char c : s.toCharArray())
        {
            if(!stack.empty())
            {
                if(stack.peek() == c)
                {
                    stack.pop();
                    continue;
                }
                    
            }
            stack.push(c);
        }
        if(stack.empty())
            answer = 1;
        System.out.println(answer);
    }
    
}
- 스택이 비어있다면 문자를 넣는다.
 - 스택이 비어있지 않다면 top을 확인한다. 만약 스택의 탑과 들어올려는 값이 같으면 짝지어 지는 경우이므로 스택에서 제거하고 다음 원소에 대해 1,2번과정을 본다.
 - 모든 과정을 마쳤을 때, 스택이 비어있다면 1을 반환한다.
 
최종 시간복잡도는 \(O(n)\)이다.
테스트