티스토리 뷰
반응형
문제 링크: www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마
www.acmicpc.net
스택을 활용한 문제이다.
여는 괄호가 나왔을 때 스택에 넣어주고, 닫는 괄호가 나왔을 때 스택의 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
- 코테후기
- Dash
- dash-plotly
- 머신러닝
- 자료구조
- 카카오추천팀
- MySQL
- 우선순위큐
- 리액트
- dfs
- 코드포매터
- 후위표기식
- 동적계획법
- 컴퓨터과학
- sql
- 개발
- 백준
- JS
- plotly
- c++
- 컴퓨터공학
- 알고리즘
- 회고
- 프로그래머스
- 스택
- React
- reactjs
- 다이나믹프로그래밍
- 자바스크립트
- 큐
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형