https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
이 문제를 보자마자 스택(stack) 자료 구조가 떠올랐다면, 당신은 프로그래밍 에이스 ! (언제나 그렇듯 헛소리에 대해서는 반박 시 당신의 말이 항상 옳습니다)
문제 해결 과정
착안
문제를 보자마자 프로그래밍 에이스가 되기 위해서 스택이라는 자료구조를 떠올렸는데, 조금 더 고찰해본 결과로는 굳이 스택 자료구조 자체를 이용하지 않더라도 스택 자료구조가 구현되는 원리만 똑같이 이용하면 문제를 해결할 수 있을 것으로 생각하였다. 즉, 괄호 문자 '('가 입력되거나 ')'가 입력될 때마다 어떠한 카운팅을 저장하고 있는 변수에 증감연산을 수행(마치 스택 포인터 같은 역할을 하는)하는 것만으로도 문제를 해결할 수 있을 것이라 생각이 되어 그대로 실천에 옮겨보았다.
구현
[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~
더보기
#include <iostream>
using namespace std;
int main()
{
int T;
char str[50] = { 0, };
scanf("%d", &T);
while (T--)
{
scanf("%s", str);
int count = 0;
for (char c : str)
{
if (c == '(') count++;
if (c == ')') count--;
if (!c || count < 0) break;
}
if (count)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
실행 결과
* 코드를 제출한 시점과 글 작성 시점이 달라, 주석 추가 등의 이유로 실행 결과의 코드 길이는 상이할 수 있음.
'C++ 코딩 문제 풀이 > 백준' 카테고리의 다른 글
[Baekjoon] 2798번: 블랙잭 (0) | 2023.05.07 |
---|---|
[Baekjoon] 18258번: 큐 2 (2) | 2023.05.07 |
[Baekjoon] 1002번: 터렛 (0) | 2023.05.06 |
[Baekjoon] 2485번: 가로수 (0) | 2023.05.06 |
[Baekjoon] 1735번: 분수 합 (0) | 2023.05.06 |
댓글