개발공부/코딩테스트 연습문제

[프로그래머스] Level.2 - 짝지어 제거하기

ku-na 2022. 1. 19. 13:54

문제 설명과 제한사항

풀이_1차

class Solution
{
    public int solution(String s)
    {
        int tmp = s.length();
        while(s.length() > 0){
            for(int i = 0; i < s.length()-1; i++){
                if(s.charAt(i) == s.charAt(i+1)){
                    if(i > 0) {
                        s = s.substring(0,i) + s.substring(i+2);
                    }
                    else s = s.substring(i+2);
                    break;
                }
            }
            if(tmp == s.length()) return 0;
            else tmp = s.length();
        }
        return 1;
    }
}

++

굉..장한 하드코딩..!

그래서 결과는 짜잔?~

효율성이 개똥이다. 그리하여 효율성 있게 고쳐보고자 한다.

 

class Solution
{
    public int solution(String s)
    {
        int tmp = s.length();
        int i = 0;
        while(s.length() > 0){
            if(i == s.length() - 1) return 0;
            if(s.charAt(i) == s.charAt(i+1)){
                s = s.replace(s.substring(i,i+2), "");
                i = 0;
            } 
            else i++;
        }
        return 1;
    }
}

++

짜잔~ 깔끔한 쓰레기가 됐습니다

하나는 통과했어..? 왜..?

 

+++

마지막 풀이

import java.util.Stack;
class Solution
{
    public int solution(String s)
    {
        Stack<String> tack = new Stack<String>();
        String tmp;
        for(int i = 0; i < s.length(); i++){
            tmp = s.substring(i,i+1);
            if(tack.isEmpty()) tack.push(tmp);
            else{
                if(tack.peek().equals(tmp)){
                    tack.pop();
                }
                else tack.push(tmp);
            }
        }
        if(tack.isEmpty()) return 1;
        else return 0;
    }
}

사실 이문제는 스택을 몇번 활용해 본 사람이면 너무나도 달콤하게 느껴져서 스택을 사용하게 만드는 문제였던 것 같다.

위에 더러운 코드들을 작성할때 한 8라인쯤..? 에서 아.. 쒸.. 그냥 스택 쓸까 했는데 귀찮았다. 그래서 저 상태에서 깔끔하게 만들고 싶었는데 실패해서.. 결국 스택으로 풀었다..

스택으로 풀었을때 성능이다.