Programmers/Level 2
C++ / 프로그래머스 / 올바른 괄호
GitHubSeob
2023. 6. 26. 23:00
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
백준에서 풀었던 문제와 같다
스택을 이용하면 간단하게 풀 수 있다.
1. 스택이 비어있을 때 첫 괄호가 ')' 일 때
이 경우는 무조건 짝지을 수 없으므로 바로 return을 하면 된다.
2. 괄호가 '('일 때
괄호를 닫을 수 없으므로 스택에 push 한다.
3. 스택이 비어있지 않고, 괄호가 ')' 일 때
스택에는 무조건 이 경우에 의해서 무조건 스택에는 '('만 들어가 있다.
따라서 pop을 하여 스택을 한 칸 비워주기만 하면 된다.
for문이 끝났을 때, 스택이 비어있다면 올바르지 않은 괄호이므로 false를,
스택이 비어있다면 true를 return 한다.
코드
#include <string>
#include <iostream>
#include <stack>
using namespace std;
bool solution(string s)
{
bool answer(true);
stack<char>st;
int idx(0);
for (idx = 0; idx < s.size(); ++idx) {
if (st.empty() && s[idx] == ')') {
return false;
}
else if (s[idx] == '(') {
st.push('(');
}
else if (s[idx] == ')') {
st.pop();
}
}
if (st.empty())
return true;
else return false;
}