짝 지어 제거하기..

Jobmania·2022년 11월 27일
0


맨처음 생각했던 것은 글자 하나당 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 활용도 중요하지만 한 작업내에서 추가 작업이 가능한지에 대해서도 생각..

profile
HelloWorld에서 RealWorld로

0개의 댓글