맨처음 생각했던 것은 글자 하나당 List에 넣어
[ b, a ,a, b, a, a] 로 만들어
이전 글자와 동일하다면 제거하여
[ b, a ,a, b, a, a] -> [b,b,a,a] -> [ a, a, ] -> [ ]
이렇게 생각하여 문제를 풀었으나 효율성에서 탈락
public int solution(String s) // 시간초과..(효율성)
{
int answer = 0;
List<String> array = new ArrayList<>();
for (int i = 0; i < s.length(); i++) { //리스트에 넣고.
array.add(String.valueOf(s.charAt(i)));
}
int count = 0;
while (count != s.length()) {
for (int i = 1; i < array.size(); i++) {
if (array.get((i - 1)).equals(array.get(i))) {
array.remove(i - 1);
array.remove(i - 1);
break;
}
}
count++;
}
if (array.size() == 0) {
answer = 1;
}
return answer;
넣기 위해 반복문 1번, 제거하기 위해서 1번, 2번의 과정 진행이 효율성이 저하된다고 생각하여, 넣자마자 이전의 글자와 비교하여 제거하는 것으로 생각.
그리고 그 와중 Stack Class를 링크 알게되어 활용함.
{
int answer = 0;
Stack<Character> stack = new Stack<>();
for(int i = 0 ; i < s.length() ; i ++ ){
char c = s.charAt(i);
if(stack.isEmpty() || stack.peek()!=c){ //비어있거나, 상단의 값 출력
stack.push(c);
}else {
stack.pop();
}
}
if(stack.isEmpty()){
answer = 1;
}
return answer;
}
List형식으로 넣고 풀었을시 .. 시간초과 발생.
Stack으로 넣고 풀었을시 ..
Stack 활용도 중요하지만 한 작업내에서 추가 작업이 가능한지에 대해서도 생각..