문제
소문자로 이루어진 문자열이 주어지고 같은 글자를 짝지어 삭제하여 모든 문자열을 삭제가능한지를 확인하는 문제이다.
해결
스택을 해결하여 간단히 해결가능하다.
예를들어, 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;
}
}
'Algorithm > Practice' 카테고리의 다른 글
Programmers - 예상 대진표 with JAVA (V) (0) | 2023.06.03 |
---|---|
Programmers - 크기가 작은 부분 문자열 with JAVA (V) (0) | 2023.06.01 |
Programmers - N으로 표현 with JAVA (V) (0) | 2023.05.22 |
Programmers - 단속 카메라 with JAVA (0) | 2023.05.19 |
Programmers - 순위 with JAVA (V) (0) | 2023.05.18 |