괄호(9012)

NJW·2021년 8월 28일
0

코테

목록 보기
93/170

들어가는 말

괄호()가 제대로 존재하면 YES를 존재하지 않으면 NO를 반환하는 문자이다.

코드 설명

stack을 쓸까 고민하다가 vector을 썼다. 먼저 몇 번 반복되는지 t를 받아준다. 다음 t만큼 string을 받는데, 여기서 저장할 벡터는 char이다. string의 문자 하나하나(string a[5])를 벡터에 넣어줄 것이기 때문이다.
받은 string만큼 반복문을 돌리는데, 만일 '('라면 벡터에 넣어준다. 벡터가 비어 있지 않은데 문자가 ')'이고 제일 윗 부분이 '('이라면 제일 윗부분을 지워준다.
여기서 ')'은 벡터에 넣어주지 않는다는 것을 생각한다. '('만 넣어주고 ')'이 있을 경우 '('을 지워줘서 마지막에 벡터에 아무것도 없으면 YES를 여전히 존재하면 NO를 출력하는 방식이다.
')'을 넣어주지 않아서 잠시 원하는 값이 나오지 않았다. 그 이유는 간단한데 벡터가 전부 짝 지어져서 비었는데, ')'이 들어오는 경우 벡터는 여전히 크기가 0이기에 yes를 반환하는 것이다. 때문에 위의 경우(EX, '(())())' 전부 짝이 지어졌는데, 마지막이 ')'이다)에는 마지막 문자를 넣어주고 break를 해줘서 벡터에 문자가 존재하게 했다.
오...

코드

#include<iostream>
#include<vector>

using namespace std;

int main() {
	int t;
	cin >> t;
	vector<char> s;

	for (int i = 0; i < t; i++) {
		string a;
		cin >> a;

		for (int j = 0; j < a.length(); j++) {
			if (a[j] == '('){
				s.push_back(a[j]);
			}
			else if(!s.empty() && a[j] == ')' && s.back() == '(') {
				s.pop_back();
			}
			else {
				s.push_back(a[j]);
				break;
			}
		}

		if (s.empty()) {
			cout << "YES" << endl;
		}
		else {
			cout << "NO" << endl;
		}
		s.clear();
	}

	return 0;
}
profile
https://jiwonna52.tistory.com/

0개의 댓글