[algorithm] 백준 4949번 균형잡힌 세상

2026. 1. 25. 11:04·algorithm/스택
반응형

 

문제 설명 & 접근 방식

" ( " 는 " ) " 랑만 " [ " 는 " ] " 랑만 맞춰져야하고 한 문장이 완벽히 다 괄호 쌍들이 맞아야 균형잡힌 문자열인 것이다

닫는 괄호가 나왔을 때 짝을 맞추어 소거해가는 방식으로 풀어야된다고 봤으므로 스택을 사용해야한다고 생각했다

 

접근 방식으로는

1. 여는 괄호가 나오면 우선 스택에 push한다

2. 닫는 괄호가 나온 경우

  2-1 스택이 비어있다면 탈락

  2-2 스택의 top이 짝이 안맞으면 탈락

  2-3 스택의 top이 짝이 맞으면 pop

3. 1~2 과정이 끝났는데 스택에 괄호가 남아있으면 탈락 없으면 통과

 

이 규칙으로 구현해주면 된다

 

코드

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

int main() {
    string s;
    vector<string> vec;
    while(1)
        {
            vec.clear();
            getline(cin,s);
            stack<int> st; // 스택 초기화함수 없어서 함수 내에서 선언
            if(s == ".") break;
            else
            {
                for(char c : s)
                    {
                        if(c == '(' || c == '[') st.push(c);
                        
                        if(c == ')')
                        {
                            if(st.size() == 0)
                            {
                                vec.push_back("no");
                                break;
                            }
                            else if(st.top() != '(')
                            {
                                vec.push_back("no");
                                break;
                            }
                            else st.pop();
                        }
                        if(c == ']')
                        {
                            if(st.size() == 0)
                            {
                                vec.push_back("no");
                                break;
                            }
                            else if(st.top() != '[')
                            {
                                vec.push_back("no");
                                break;
                            }
                            else st.pop();
                        }
                    }
                if(vec.size() == 0)
                {
                    if(st.size() == 0) cout << "yes" << "\n";
                    else cout << "no" << "\n";
                }
                else cout << "no" << "\n";
            }
        }
   
    return 0;
}

 

오류

처음엔 마지막 yes, no 판정하는 부분에서

if(st.size() == 0) cout << "yes" << "\n";

 

이 부분 없이 했었는데 " ((. " 이라는 반례가 있어 틀렸었다

즉 닫힌 괄호가 한 번도 나오지 않은 경우에도 yes로 판정됐던 것이다

 

그리고 닫는 괄호 나온 경우 탈락 조건에 걸리면 "no"를 vector에 따로 넣어서 판정했었는데

이는 비효율적이고 boolean 변수를 활용해서 푸는 것이 더 깔끔한 것같다

 

반응형

'algorithm > 스택' 카테고리의 다른 글

[algorithm] 백준 3986번 좋은 단어  (0) 2026.01.25
[algorithm] 백준 9012번 괄호  (0) 2026.01.25
[algorithm] 백준 10773번 제로  (0) 2026.01.12
[algorithm] 백준 10828번 스택  (0) 2026.01.12
'algorithm/스택' 카테고리의 다른 글
  • [algorithm] 백준 3986번 좋은 단어
  • [algorithm] 백준 9012번 괄호
  • [algorithm] 백준 10773번 제로
  • [algorithm] 백준 10828번 스택
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    list
    AI
    인공지능
    DL
    홀드아웃 검증
    ML
    머신러닝
    Aimers
    주성분변환
    게시판
    github
    git
    Spring Boot
    연결리스트
    오프라인 학습
    백준
    그레디언트 클리핑
    알고리즘
    딥러닝
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[algorithm] 백준 4949번 균형잡힌 세상
상단으로

티스토리툴바