본문 바로가기
C++ 코딩 문제 풀이/백준

[Baekjoon] 9012번: 괄호

by 섬댕이 2023. 5. 6.

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

댓글