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
|
import java.util.*;
class Solution{
public int solution(String s) {
int answer = 0;
Stack<String> st = new Stack<String>();
String top = null, str = null;
if (s.length() % 2 == 0) {
for (int i = 0; i < s.length(); i++) {
str = String.valueOf(s.charAt(i));
if (!st.isEmpty()) {
top = st.peek();
if (top.equals(str))
st.pop();
else
st.push(str);
} else
st.push(str);
}
if (st.size() == 0)
answer = 1;
}
return answer;
}
}
|
cs |
문자열 2개가 붙어있으면 제거하고 최종적으로 문자열이 남아있는지 확인하는 문제이다.
단순하게 replaceAll을 사용해서 해결했지만, 효율성에서 걸리게 되었다.
왜냐하면 전체 문자열을 여러 번 반복해서 확인하기 때문이다.
이를 해결하기 위해 Stack을 사용하였고, O(n)의 복잡도로 해결할 수 있었다.
문자열이 홀수인 경우를 필터링하고 스택의 상태를 확인하며 비교하였다.
replaceAll을 사용한 코드는 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.util.*;
class Solution{
public int solution(String s) {
int answer = 0;
int len = s.length();
while (len != 0) {
s = s.replaceAll("(.)\\1", "");
int tmp = s.length();
if (len == tmp)
break;
else
len = tmp;
}
if (len == 0)
answer = 1;
return answer;
}
}
|
cs |
정규표현식을 사용하여 임의의 한 문자가 붙어있는 경우를 체크하였다.
Backreferences인 \\1 사용하여 (.)에서 나온 임의의 문자가 붙어있는 것을 확인한다.
'Programmers > Level2' 카테고리의 다른 글
프린터 (0) | 2021.07.21 |
---|---|
큰 수 만들기 (0) | 2021.07.21 |
소수 찾기 (0) | 2021.07.19 |
단체사진 찍기 (0) | 2021.07.19 |
[카카오 인턴] 수식 최대화 (0) | 2021.07.19 |