[백준][4949] 균형잡힌 세상
요구사항 분석
여러 문자들이 섞여있는 문자열이 입력될 때,
이 문자열 속 소괄호와(“()”) 대괄호(“[]”)의 짝이 옳바른지 확인하는 문제입니다.
알고리즘 선택
괄호를 확인할 때, 입력된 순서의 역순으로 반대편 괄호가 있어야 짝이 성립되는 것이므로
FILO 구조의 컨테이너인 STACK 을 사용하여 구현하였습니다.
풀이 분석
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
32
33
34
35
36
37
38
39
#include <iostream>
#include <string>
int main() {
while (true) {
std::string buf;
std::getline(std::cin, buf);
if (buf == ".") break;
std::string check_str;
bool answer = true;
for (char c : buf) {
if (c != '(' && c != ')' && c != '[' && c != ']') continue;
if (c == '(' || c == '[') {
check_str.push_back(c);
answer = false;
} else if (false == check_str.empty()) {
if ((*check_str.rbegin() == '(' && c == ')')
|| (*check_str.rbegin() == '[' && c == ']')) {
check_str.pop_back();
answer = true;
}
else {
answer = false;
break;
}
}
else {
answer = false;
break;
}
}
if (answer && check_str.empty()) printf("yes\n");
else printf("no\n");
}
return 0;
}
개선하기
std의 cin 함수는 공백을 기준으로 입력을 받으므로 string lib에 있는 getline을 사용하였고
stack 이라는 lib도 존재하지만 string이 vector로 구현되어 있으며
vector의 push_back, pop_back 만으로 충분이 구현이 가능하였습니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.