짝지어 제거하기
문제정의
연달아 등장하는 알파벳을 짝지어 삭제한다고 할 때, 모든 문자열을 삭제할 수 있는지 확인하는 문제이다.
문제풀이
전체 코드는 다음과 같다. 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)\)이다.