Game Develop

[Algorithm] Programmers :: 짝지어 제거하기 본문

Algorithm/Programmers

[Algorithm] Programmers :: 짝지어 제거하기

MaxLevel 2022. 5. 20. 07:45

https://programmers.co.kr/learn/courses/30/lessons/12973

 

코딩테스트 연습 - 짝지어 제거하기

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙

programmers.co.kr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int solution(string s)
{
    int answer = -1;
    stack<char> tempStack; 
 
    while (s.size() != 0)
    {
        char stand = s.back(); // 일단 뽑는다
        s.pop_back();
 
        char popedTempStack;
        if (s.size() == 0// 뽑고나서 스택에 아무것도 없으면 (비교할게 없으면)
        {
            if (tempStack.size() == 0) popedTempStack = '-';
            else popedTempStack = tempStack.top();
 
            if (stand == popedTempStack)tempStack.pop();
            else tempStack.push(stand);
        }
        else // 뽑고나서 스택에 1개라도 있으면
        {
            if (stand == s.back()) s.pop_back(); // 연속된 수 있으면 빼버리기
            else // 연속된 수 아니면 마찬가지로 tempStack top이랑 비교
            {
                if (tempStack.size() == 0) popedTempStack = '-';
                else popedTempStack = tempStack.top();
 
                if (stand == popedTempStack) tempStack.pop();
                else tempStack.push(stand);
            }
        }
    }
 
    if (tempStack.size() == 0return 1;
    else return 0;
 
    return answer;
}
cs

 

약간 전형적인(?) 스택을 이용해서 푸는 문제인데, 사실 위 코드는 다른사람들의 풀이에 비해 지저분한 편이다.

말 그대로 당장 생각나는대로 구현한거라서 그렇다. 코딩테스트 준비자체를 이렇게 열심히 하는건 거의 처음이라서, 아직 각 유형에 대해 빠릿빠릿하게 구현이 떠오르지 않는다.

아래 코드는 다른 사람의 풀이이다. 딱봐도 어마무시하게 많이 차이가 난다.

비록 지금은 위의 코드처럼 짰지만, 다음엔 분명히 안그럴것이다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int solution(string s)
{
    stack<char> c;
    int answer = 0;
    for(int i=0; i<s.size(); i++){
        if(c.size()==0){
            c.push(s[i]);
            continue;
        }
        if(c.top() == s[i])
        {
            c.pop();
        }
        else{
            c.push(s[i]);   
        }
    }
    // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
    if(c.empty())
        answer = 1;
    else{
        answer = 0;
    }
 
    return answer;
}
cs