728x90
시간 제한 : 1초
메모리 제한 : 128MB
입력
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다.
입력의 종료조건으로 맨 마지막에 점 하나(".")가 들어온다.
출력
각 줄마다 해당 문자열이 균형을 이루고 있으면 "yes"를, 아니면 "no"를 출력한다.
소스코드
#include <iostream> #include <string> #include <stack> using namespace std; int main(void) { string tmp; while (1) { getline(cin, tmp); if (tmp == ".") break; int len = tmp.length(); bool check = true; stack<char> st; for (int i = 0; i < len; i++) { if (tmp[i] == '(') { st.push(tmp[i]); } else if (tmp[i] == '[') { st.push(tmp[i]); } else if (tmp[i] == ')') { if (st.empty()) { check = false; break; } if (st.top() == '(') st.pop(); else { check = false; break; } } else if (tmp[i] == ']') { if (st.empty()) { check = false; break; } if (st.top() == '[') st.pop(); else { check = false; break; } } } if (check && st.empty()) cout << "yes\n"; else cout << "no\n"; } }
Tip
괄호 짝을 맞춰주는 문제로, 문자열처리와 스택 활용을 해주면 쉽게 문제를 풀 수 있다.
백준 온라인 저지 사이트에 문제가 오역되어 있어서 문제를 이해하는데 애를 먹었다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 2828 - 사과 담기 게임(COCI 2011/2012) (0) | 2018.06.17 |
---|---|
백준] 10546 - 배부른 마라토너(COCI 2014/2015) (0) | 2018.06.16 |
백준] 2512 - 예산(KOI 2012;한국정보올림피아드 2012) (0) | 2018.06.12 |
백준] 14470 - 전자레인지(JOI 2017 예선) (0) | 2018.06.10 |
백준] 1138 - 한 줄로 서기 (0) | 2018.06.08 |