백준 9012번: 괄호
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
문제
예제
- 문제해석 및 풀이
이 문제는 첫 줄에 테스트 케이스의 개수 T가 주어지고 T개의 테스트를 진행하고 괄호가 올바르게 쓰였으면 YES를 출력하고 올바르지 않게 쓰였으면 NO를 출력하는 문제이다. 처음에는 (의 개수와 )의 개수가 같기만 하면 되는 줄 알고 코드를 짜보았으나 결과는 '틀렸습니다' 였다. 반례를 생각해보니 입력이 ))(( 로 주어질 경우, 올바르지 않게 쓰였음에도 나의 알고리즘을 옳다고 판단했다. 개수도 같아야 하지만 (가 )보다 앞에 있어야 한다는 조건을 추가해야 한다.
- 코드
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t;
string str;
cin >> t;
for (int i = 0; i < t; i++) {
cin >> str;
int cnt = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == '(')
cnt += 1;
else if (str[i] == ')') {
if (cnt >= 1)
cnt--;
else if (cnt == 0) {
cnt--;
cout << "NO" << "\n";
break;
}
}
}
if (cnt == 0)
cout << "YES" << "\n";
else if (cnt >= 1)
cout << "NO" << "\n";
}
return 0;
}
조건문을 사용해서 (이 주어졌을 때 cnt변수에 1을 더해주고 )이 주어지면 cnt변수에 1을 빼주고 이미 cnt변수가 0인 상태이면 즉시 NO를 출력하고 즉시 조건문을 종료시킨다. 이런 식으로 진행하면 cnt가 0이면 옳은 괄호이고 1보다 크거나 같으면 올바르지 않게 쓰인 괄호임을 알 수 있다.
- 정리
문제를 어떻게 풀 지 생각하는 것이 조금 어려웠던 문제였다. 하지만 구현하는 것은 난이도가 높이 않아 큰 어려움 없이 구현할 수 있었다.
궁금한 것이나 더 나은 코드 및 방법, 그리고 잘못된 것이 있다면 댓글에 남겨주시기 바란다.
'백준 baekjoon' 카테고리의 다른 글
[백준 BOJ] 12789 도키도키 간식드리미 C++ (2) | 2024.02.06 |
---|---|
[백준 BOJ] 4949 균형잡힌 세상 C++ (0) | 2024.02.05 |
[백준 BOJ] 10773 제로 C++ (0) | 2024.02.03 |
[백준 BOJ] 28278 스택 2 C++ (2) | 2024.02.03 |
[백준 BOJ] 13909 창문 닫기 C++ (0) | 2024.02.02 |