프로그래머스 Lv 2. 12909 c++ 올바른 괄호

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

#include <bits/stdc++.h>

using namespace std;

bool solution(string s)
{
    bool answer = true;
    stack<char> st;
    for(auto c: s){
        if(c=='(') st.push(c);
        else {
            if(st.empty()) {
                answer=false;
                return answer;
            }
            else st.pop();
        }
    }
    if(!st.empty()) answer=false;
    return answer;
}

중요한 처리를 하는 과정을 ')' 일때로 두어서 코드를 작성하였다. 

 

위의 코드의 경우는 stack을 이용해서 작성하였는데, 결국 이 경우 모든 처리를 했을때 stack이 비어있어야 제대로 된 형태의 

괄호형태 라는것을 이용한 풀이이고, 다른 사람의 풀이를 보니까 결국 가장 중요한, 맨 마지막에 다 비어야 한다는 것을 이용한 다른 형태의 풀이가 있어서 첨부해본다. 

#include<string>
#include <iostream>

using namespace std;

bool solution(string s)
{
    int n = 0;
    for (int i = 0; i < s.length(); i++) {
        if (n < 0)
            return false;
        if (s[i] == '(')
            n++;
        else if (s[i] == ')')
            n--;
    }
    return n == 0;
}

위 풀이의 경우는 카운트 해주는 변수 n을 선언해서, 들어오는 '(' 에 따라서 n++을, 그리고 ')'에 따라서 n--을 해주는데, 

그때에 맨 마지막에 숫자가 0인지 아닌지에 따라서 true false를 리턴하게 해주는 형태의 코드이다. 

이 코드도 중간에 잘못된 형태라면 뒤는 더 보지않고 바로 끝내버리는 형태이다. 

 

결국 내가 작성한 코드와 같은 논리를 이용해서 문제를 해결하는데, stack을 쓰지않고 카운트 변수를 이용해서 조금 더 간결하게 작성한듯 하다. 멋진 풀이이다. 

 

  Comments,     Trackbacks