알고리즘/프로그래머스

프로그래머스Lv2 - 짝 지어 제거하기 - JAVA

놀이방사장님 2023. 11. 23. 00:00
728x90
반응형

안녕하세요 놀이방 사장입니다.

 

이번 포스팅은 프로그래머스

Lv2 - 짝 지어 제거하기 포스팅입니다.

 

문자열 s를 기준으로 똑같은 문자가 붙어있으면 제거를 해줍니다. 그렇게 문자열이 다 사라지면 1 다 사라지지 않으면 0을 반환해줍니다.

 

이게 2개가 짝이 지어지면 스택을 생각했어야했는데 for문으로 풀어야겠다 생각이 들어서 for으로 풀었다가 정답은 맞아도 시간초과가 나더라구요

 

/*
* 시간초과 나는 코드
* */

class Solution
{
    public int solution(String s)
    {
        int answer = -1;
        StringBuffer str = new StringBuffer(s);

        for(int i=0; i<str.length()-1; i++){

            if(str.charAt(i) == str.charAt(i+1)){
                str.delete(i, i+2);
                i=-1;
            }

        }
        if(str.length() == 0){
            answer = 1;
        }else{
            answer = 0;
        }

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println(str);

        return answer;
    }
}

이게 처음에 제가 짠 코드입니다.

근데 이렇게 쓰면 문자열길이가 길어서 시간초과가 납니다.

일단 찾아보니깐 저기 delete메소드도 오래걸리고 다시 for인덱스를 처음부터 돌리니깐 시간초과가 나는 거 같아요

 

그래서 좀 찾아보니깐 스택이 있더라구요

스택으로 푸니깐 다행히 풀리더라구여

import java.util.Stack;

/*
* 정답 코드
* */
class Solution
{
    public int solution(String s)
    {
        Stack<Character> stack = new Stack<>();
        int answer = -1;
        for(int i =0; i<s.length(); i++){
            if(!stack.isEmpty() && stack.peek() == s.charAt(i)){
                stack.pop();
            }else{
                stack.push(s.charAt(i));
            }
        }


        if(stack.isEmpty()){
            answer = 1;
        }else{
            answer = 0;
        }
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("Hello Java");

        return answer;
    }
}

제 생각엔 이코드가 제일 흔한 풀이방법일 거 같네요

 

이상으로 짝지어 제거하기 포스팅을 마치겠습니다.

반응형