[Week 3] BRACKETS2 self review - Yunhyunjo
Closed this issue · 0 comments
Yunhyunjo commented
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이 비었는지를 검사한 후 출력해 주었습니다.