티스토리 뷰
반응형
문제 링크: www.acmicpc.net/problem/4949
스택을 활용한 문제이다.
여는 괄호가 나왔을 때 스택에 넣어주고, 닫는 괄호가 나왔을 때 스택의 top(제일 최근에 들어간 여는 괄호)와 짝이 맞는지 확인한다. 짝이 맞지 않으면 flag를 false로 바꾸고 반복문을 탈출한다.
짝이 맞지 않는 경우가 없었어도 마지막에 여는 괄호만 나오고 닫는 괄호가 나오지 않았으면 올바른 문자열이 아니다. 이 경우 스택에 원소가 남아있다.
flag가 false인 경우와 스택에 원소가 남아있는 경우 "no"를 출력하고 아닌 경우 "yes"를 출력한다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
string str;
stack<char> st;
while (true) {
getline(cin, str);
// 입력 종료 조건
if (str == ".") {
break;
}
// 스택 초기화
while (!st.empty()) {
st.pop();
}
bool flag = true;
for (int i = 0; i < str.length(); i++) {
// 여는 괄호 만나면 스택에 넣기
if (str[i] == '(' || str[i] == '[') {
st.push(str[i]);
}
else if (str[i] == ')') {
if (!st.empty() && st.top() == '(') {
st.pop();
}
else {
flag = false;
break;
}
}
else if (str[i] == ']') {
if (!st.empty() && st.top() == '[') {
st.pop();
}
else {
flag = false;
break;
}
}
}
if (flag && st.empty()) { // 스택이 비어있어야 한다
cout << "yes\n";
}
else {
cout << "no\n";
}
}
return 0;
}
반응형
'알고리즘 > Baekjoon' 카테고리의 다른 글
백준 1398: 동전 문제 (C++) (0) | 2020.11.25 |
---|---|
백준 1918: 후위 표기식 (C++) (0) | 2020.11.22 |
백준 2164: 카드2 (C++) (0) | 2020.11.21 |
백준 1966: 프린터 큐 (C++) (0) | 2020.11.21 |
백준 10828: 스택 (C++) (0) | 2020.11.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JS
- c++
- 자료구조
- 프로그래머스
- 우선순위큐
- sql
- 카카오추천팀
- plotly
- Dash
- 리액트
- reactjs
- 코드포매터
- 코테후기
- 머신러닝
- 컴퓨터공학
- 스택
- 자바스크립트
- 회고
- 큐
- dash-plotly
- React
- 컴퓨터과학
- 후위표기식
- MySQL
- dfs
- 동적계획법
- 개발
- 다이나믹프로그래밍
- 백준
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형