본문 바로가기
알고리즘(C++)

스택 - 괄호 짝 맞추기

by 송파감자 2025. 1. 27.

/*
- 문제 : Solution함수 구현하기
- 조건 : 
        1) Solution 함수는 true/ false 반환한다
        2) 문자열 s를 매개변수로 한다
        3) 문자열 s는 소괄호 여러개로 구성된다 (짝 안 맞을 수 있음)
        4) 소괄호과 짝 맞으면 true/ 안 맞으면 false 반환한다
*/

 

문제 코드

#include <iostream>
#include <stack>
using namespace std;

bool solution(string s) 
{    
 
}

int main()
{
    // 예시 코드
    cout << solution("(())()") << endl;  // 1
    cout << solution("((())()") << endl; // 0 

    return 0;
}

 

정답코드

#include <iostream>
#include <stack>
#include <string>

using namespace std;

/*
- 문제 : Solution함수 구현하기
- 조건 : 
        1) Solution 함수는 true/ false 반환한다
        2) 문자열 s를 매개변수로 한다
        3) 문자열 s는 소괄호 여러개로 구성된다 (짝 안 맞을 수 있음)
        4) 소괄호과 짝 맞으면 true/ 안 맞으면 false 반환한다
*/
bool solution(string s) 
{    
    stack <char> St;     
   
    for (char c : s)
    {
        if (c == '(')
        {
            St.push(c);
        }
        else if (c == ')')
        {
            if (St.empty())
            {
                return false;
            }
            else
            {
                St.pop();
            }
        }
    }

    return St.empty();
}

int main()
{
    // 예시 코드
    cout << solution("(())()") << endl;  // 1
    cout << solution("((())()") << endl; // 0 

    return 0;
}

 

나의 코멘트

  • 30분 시간 맞추고 스택으로 풀려고 시도했다. -> 혼자 못 풀었음
  • 처음에는 string find함수 써야 하는 걸까 시도했다
  • 범위기반 for문을 잘 못 써서 이것도 찾아봤다 
  • 답을 보고 ( 만 스택에 넣다 뺐다하는데 그 다음 데이터가 ) 일 때만 뺀다는 조건을 하면 해결된다는 걸 알았다 

 

'알고리즘(C++)' 카테고리의 다른 글

배열 - 두개 뽑아서 더해서 정렬하기  (0) 2025.01.30
배열 - 배열제어하기  (0) 2025.01.30
배열 - 배열정리하기  (0) 2025.01.30
큐- 요세푸스 문제  (0) 2025.01.28
스택 - 10진수를 2진수로 바꾸기  (0) 2025.01.28