Queue-ri/Advanced-Algorithm-Study

[Week 3] BRACKETS2 self review - Yunhyunjo

Closed this issue · 0 comments

BRACKETS2 self review

  • 파일명: ABC/BRACKETS2/Yunhyunjo.cpp
  • 수행시간: 4ms

1. 고민 과정

자료구조 stack과 if문을 사용해서 풀면 될 것이라 생각했습니다.

2. 풀이 아이디어

먼저 열린 괄호일 경우엔 stack에 push 하고 아닐 경우는 && 연산자로 stack에 값이 있는지와 stack의 top이 현재 문자와 대응하는 괄호가 맞는지를 체크해 주었습니다.
둘 다 참일 경우에는 stack을 pop시켜 주었고, 아닐 경우에는 flag를 false로 하고 더 이상 탐색할 필요가 없으므로 break 해 주었습니다.

3. 작성한 코드와 설명

string str;
cin >> str;

stack <char> s;
bool flag = true;
for (char ch: str) {
	if(ch == '[') s.push('[');
	else if (ch == '{') s.push('{');
	else if (ch == '(') s.push('(');
	else if (ch == ']'){
		if (!s.empty() && s.top() == '[') s.pop();
		else {
			flag = false;
			break;
		}
	}
	else if (ch == '}') {
		if (!s.empty() && s.top() == '{') s.pop();
		else {
			flag = false;
			break;
		}
	}
	else {
		if (!s.empty() && s.top() == '(') s.pop();
		else {
			flag = false;
			break;
		}
	}
}
if (flag && s.empty()) cout << "YES" << endl;
else cout << "NO" << endl;

입력받은 str을 앞에서부터 하나하나 탐색해 줘야하기 때문엔 for-each문으로 하나씩 뽑아서 비교해 주었습니다.
조건문을 통해 괄호가 맞는지 비교해 주었고, 만약 전부 열린 괄호거나 열린 괄호가 더 많다면 flag가 여전히 true이므로 출력 전 stack이 비었는지를 검사한 후 출력해 주었습니다.