티스토리 뷰
반응형
백준 9012번 괄호
https://www.acmicpc.net/problem/9012
정답 코드
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int find(string a) {
stack<char>s;
for (int x = 0; x < a.length(); x++) {
if (a[x] == '(')
s.push(a[x]);
else if (a[x] == ')') {
if (s.empty() == 1) {
return 0;
}
else if (s.top() == '(')
s.pop();
else if (s.top() != '(') {
return 0;
}
}
}
if (s.empty() == 1)
return 1;
else
return 0;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
for (int x = 0; x < n; x++) {
string input;
cin >> input;
int a=find(input);
if (a == 0)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
}
문제 풀이
먼가 처음에는 어려워보였는데 너무 생각을 깊게 했던 문제입니다. string으로 입력을 받고 find함수로 보냈습니다. 0을 리턴하면 No를 출력, 그게 아니라면 yes를 출력하도록 했습니다.
문제를 읽어보니 들어온 괄호를 삭제를 시켜야하고
나중에 들어온것부터 빼야해서 LIFO특성을 가진 스택을 사용했습니다. 문자열 길이만큼 반복문을 돌리고 경우의 수를 크게 두 가지로 나누었습니다.
첫째, a[x]가 '('인 경우
이 경우에는 계속 스택에 push연산을 해줍니다.
vps가 될 가능성이 있으므로 push를 해야 합니다.
둘째, a[x]가 ')'인 경우
이 안에서 s.top()이 '('인 경우와 ')'인 경우로 나누기
첫 번째는 pop을 해주고 두 번째는 함수를 종료합니다.
그리고 스택이 비어있는 경우로 나누었습니다.
이 경우에도 함수를 종료합니다.
그래서 s.empty()가 1이면 스택을 모두 정리후 비운 것이기 때문에 1을 리턴하고, 그게 아니라면 0을 리턴
반응형
'Algorithm > BOJ' 카테고리의 다른 글
백준 9063번 C++ (0) | 2023.08.23 |
---|---|
백준 9020번 C++ (0) | 2023.08.23 |
백준 8958번 C++ (0) | 2023.08.23 |
백준 8437번 파이썬 (0) | 2023.08.23 |
백준 8393번 C++ (0) | 2023.08.23 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- C++ Stack
- HTML5
- html
- DP
- 에라토스테네스의 체
- 이분 매칭
- java
- 백준 풀이
- js
- c++ string
- Do it!
- 투 포인터
- 스택
- 카운팅 정렬
- 반복문
- 유니온 파인드
- 우선순위 큐
- 자바스크립트
- 자바
- 세그먼트 트리
- 알고리즘
- C++
- 알고리즘 공부
- 유클리드 호제법
- 자료구조
- 백준
- BFS
- 스프링 부트 crud 게시판 구현
- CSS
- DFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함