Queue-ri/Advanced-Algorithm-Study

[Week 3] BRACKETS2 self review - Choi-mina

Closed this issue · 0 comments

BRACKETS2 self review

  • 파일명: ABC/BRACKETS2/Choi-mina.cpp
  • 수행시간: 16ms

1. 고민 과정

스택을 이용해 크게 어려운 문제는 아니었습니다.

2. 풀이 아이디어

if 조건문을 이용해 열린 괄호는 스택에 넣었습니다.
닫힌괄호가 나온 경우 다시 if 조건문을 이용해 스택이 비어있거나 스택 제일 위에 있는 것이 짝이 맞지 않는 열린괄호인 경우 false를 리턴할 수 있도록 했습니다.
앞서 말한 경우를 제외하면 짝이 맞는 것이므로 pop을 해줍니다.

3. 작성한 코드와 설명

bool bracket() {
	stack<char> st;
	for (int i = 0; i < s.size(); i++) {
		if (s[i] == '(' || s[i] == '{' || s[i] == '[') {
			st.push(s[i]);
		}
		if (s[i] == ')') {
			if (st.empty() || st.top() != '(') return false;
			st.pop();
		}
		if (s[i] == '}') {
			if (st.empty() || st.top() != '{') return false;
			st.pop();
		}
		if (s[i] == ']') {
			if (st.empty() || st.top() != '[') return false;
			st.pop();
		}
	}
	return st.empty() ? true : false;
}

bracket() 함수는 괄호의 짝이 맞는지 확인하는 함수입니다.
문자열을 하나씩 확인하면서 if 조건문에 넣어 열린 괄호이면 push하고 닫힌 괄호이면 짝이 맞는지 확인한 후 pop을 해주었습니다.
문자열을 끝까지 탐색하고 짝이 다 맞아서 스택이 비어있는지 확인하기 위해 삼항연산자를 이용해 false나 true를 리턴해주었습니다.

int main() {
	cin >> c;
	for (int i = 0; i < c; i++) {
		cin >> s;
		if (bracket() == true) {
			cout << "YES" << endl;
		}
		else {
			cout << "NO" << endl;
		}

	}
	return 0;
}

메인함수에서는 입력을 받고 bracket() 함수에서 반환된 값을 if 조건문에 넣어서 'YES' 또는 'NO'를 출력했습니다.