728x90
● [문제번호 9012] 괄호
https://www.acmicpc.net/problem/9012
● 알아야 할 것
: stack 자료구조와 메소드
: 문자열 순회를 위한 iterator
● 풀이 과정
: '(' 을 만나면 stack에 저장
: ')' 을 만나면 stack에서 '('을 꺼내서 올바른 괄호 문자열(VPS)인지 확인
● 주의 할 것
: 숫자 입력 -> 공백있는 문자열 입력 시 버퍼 비우기
: stack 전역변수 => 새 test마다 stack을 비워야 함
: stack 지역변수 => 새 test마다 stack을 비우지 않아도 됨
● 참고 할 것
: NULL
● 풀이 코드
#include <bits/stdc++.h>
using namespace std;
// stack<char> s; 지역변수
string::iterator it;
string str;
int T, flag;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 숫자 입력 -> 버퍼 비우기
cin >> T >> ws;
while(T--)
{
// 매번 새로운 stack을 사용하니 지역변수로 선언
// 전역변수로 사용하는 경우 while문 마지막에 스택을 비우는 작업 필요
stack<char> s;
getline(cin, str);
// 문자열 중간에 NO 결과를 얻은 경우에 활용
flag = 0;
for(it = str.begin(); it < str.end(); it++)
{
// '(' 하나씩 stack에 쌓기
if(*it == '(')
s.push(*it);
// ')'인 경우 '('를 하나씩 뽑기
else if(*it == ')')
{
// 뽑아야 하는데 stack이 비어있는 경우 => NO
if(s.empty())
{
cout << "NO\n";
flag = 1;
break;
}
// 정상적으로 뽑는 경우
else
s.pop();
}
}
// 중간에 결과를 알아낸 경우
if(flag == 1)
continue;
// 모두 뽑혀 stack이 비어있어야 VPS
if(s.empty())
cout << "YES\n";
// VPS가 아닌 경우
else
cout << "NO\n";
}
return 0;
}
● [백준] - [알고리즘 기초 1/2] - [200 - 자료구조 1] 문제집
번호 | 문제 번호 | 문제 이름 | 풀이 링크 |
1 | 10828 | 스택 | https://pirateturtle.tistory.com/153 |
2 | 9093 | 단어 뒤집기 | https://pirateturtle.tistory.com/154 |
3 | 9012 | 괄호 | https://pirateturtle.tistory.com/155 |
4 | 1874 | 스택 수열 | https://pirateturtle.tistory.com/156 |
5 | 1406 | 에디터 | https://pirateturtle.tistory.com/158 |
6 | 10845 | 큐 | https://pirateturtle.tistory.com/161 |
7 | 1158 | 요세푸스 문제 | https://pirateturtle.tistory.com/162 |
8 | 10866 | 덱 | https://pirateturtle.tistory.com/164 |
728x90
'Baekjoon > [Code.plus] 알고리즘 기초 1/2' 카테고리의 다른 글
[BOJ/백준] 10866 덱 (0) | 2021.07.26 |
---|---|
[BOJ/백준] 1158 요세푸스 문제 (0) | 2021.07.26 |
[BOJ/백준] 10845 큐 (0) | 2021.07.26 |
[BOJ/백준] 1406 에디터 (0) | 2021.07.26 |
[BOJ/백준] 1874 스택 수열 (0) | 2021.07.26 |
[BOJ/백준] 9093 단어뒤집기 (0) | 2021.07.26 |
[BOJ/백준] 10828 스택 (0) | 2021.07.26 |
댓글