-
[STACK] BOJ 9012 번 문제풀이백준 문제풀이/etc 2019. 5. 12. 00:33
문제분석
굉장히 읽기 싫을 정도로 긴 문제지만
결국 소괄호가 한쌍으로 존재하는 가?
를 묻는 문제네요. ㅎㅎ
알고리즘 문제를 풀 때, 접근법이 굉장히 중요한 게
제가 처음에 이 문제를 접근하는
방법은 이렇습니다.
'(' , ')' 두 개의 개수를 카운트해서
같으면 VPS 이다 ~
라고 접근했습니다.
이 방법 역시 그렇게 어렵진 않지만
굉장히 단순 무식한 방법 같았습니다.
그래서 다른 분들의 코드를 보니
세상에 천재들이 많더군요.
개발자 지망생 김 모 씨의 접근법은 이렇습니다.
여는 괄호 '(' 가 나오면 무조건 스택에 PUSH 하고
닫는 괄호 ')' 가 나왔을 때,
배열 안에 여는 괄호 '(' 가 존재하면 스택에서 POP 하고
배열이 비어있다면 FALSE 하는 겁니다.
같은 문제를 이렇게 구현할 수 있다는 점에서
정말 놀랐습니다....
어쨌든 이 문제는 이런 식으로
한 줄 한줄 문자열을 받아서
해당 문자열이 VPS 인지 판별한 후
YES or NO 를 출력하는 문제였습니다.
코드
#include "bits/stdc++.h" using namespace std; bool compare(string str) { int len = (int)str.length(); stack<char> arr; for (int i = 0; i < len; i++) { char c = str[i]; if (c == '(') arr.push(str[i]); else { if (!arr.empty()) arr.pop(); else return false; } } return arr.empty(); } int main() { ios::sync_with_stdio(0); cin.tie(0); string str; int n; cin >> n; for (int i = 0; i < n; i++) { cin >> str; if (compare(str)) cout << "YES" << '\n'; else cout << "NO" << '\n'; } return 0; }
'백준 문제풀이 > etc' 카테고리의 다른 글
[C++] 카카오 코딩테스트 < 길 찾기 게임 > 문제풀이 (0) 2020.02.09 [재귀] BOJ 9095 : 1, 2, 3 더하기 (0) 2019.10.14 [ETC] BOJ 13458 : 시험 감독 (0) 2019.10.01 [Greedy] BOJ 2217 번 : 로프 (0) 2019.06.03 [STACK] BOJ 1874 번 문제풀이 (0) 2019.05.13