-
백준 4949 균형잡힌 세상 [C]알고리즘 2023. 1. 14. 16:32
문제
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다
www.acmicpc.net
풀이
https://hun6728.tistory.com/4 문제의 응용버전이라고 생각해주면 된다. 이 문제에서는 소괄호, 대괄호가 있고 여는 괄호일 때는 PUSH, 닫는 괄호일 때는 POP을 해주면 된다. 또한 주의해야 할 점이 있는데, POP을 할 때 괄호간의 짝이 맞는지도 판별해주어야 한다. 닫는 괄호가 ')' 일때는 스택의 맨 위에 있는 괄호가 '(' 이어야하며, 닫는 괄호가 ']' 일 때는 스택의 맨 위에 있는 괄호가 '[' 이어야 한다. 이를 통해 괄호간의 쌍이 맞는지를 판별해주면 된다.
코드
#include<stdio.h> #include<string.h> #include<stack> using namespace std; #define LEN 300 int main() { int i; for (;;) { char input[LEN]; stack<char> stack; fgets(input, LEN, stdin); int len = strlen(input); if (len == 2 && input[0] == '.') { break; } for (i = 0; i < len; i++) { if (input[i] == '(' || input[i] == '[') { stack.push(input[i]); } if (input[i] == ')' || input[i] == ']') { if (stack.empty()) break; if (input[i] == ')' && stack.top() == '(') { stack.pop(); continue; } if (input[i] == ']' && stack.top() == '[') { stack.pop(); continue; } break; } } if (i == len && stack.size() == 0) { printf("yes\n"); } else { printf("no\n"); } } return 0; }
'알고리즘' 카테고리의 다른 글
백준 20975 Just Stalling [C] (0) 2023.01.14 백준 1874 스택 수열 [C] (0) 2023.01.14 백준 20974 Even More Odd Photos [C] (1) 2023.01.14 백준 20973 Uddered but not Herd [C] (0) 2023.01.14 백준 21820 Acowdemia I [C] (2) 2023.01.08