제일 최악이었다.. 문제 푸는데 너무 오래걸렸을 뿐더러 자꾸 틀려서 너무 답답했다...
이번엔 틀렸던 코드도 가져왔다.
https://www.acmicpc.net/problem/9012
맞은 코드
#include<iostream>
#include<stack>
using namespace std;
int t , n;
string vps;
int main() {
cin >> t;
for (int k = 0; k < t; k++) {
stack<char>vp;
n = 0;
cin >> vps;
for (int i = 0; i < vps.size(); i++) {
if (vps[i] == '(') {
vp.push(vps[i]);
}
else {
if (!vp.empty()) {
vp.pop();
}
else
n = 1;
}
}
if (vp.empty() && n != 1) {
cout << "YES" << "\n";
}
else if (n == 1 || !vp.empty()) {
cout << "NO" << "\n";
}
}
}
- 실행이 안되는 코드는 아니었다. 하지만 어째서인지 답이 나오지 않았다.
- 입력을 2 (( 을 치고 다음라인에 )) 을 치게되면 YES 가 나왔다. 이유는 열린 괄호일 경우에는 pop을 해주지 않는다. 그러면 stack이 비어있지 않게 된다. 그래서 전역변수로 선언했던 stack<char>vp 는 for문 안에 넣어주었다.
- 이 코드에서 좀 더 깔끔하게 하자면 else if 문을 그냥 else로 바꾸는 것이다.
- 또 else 안에 else은 입력이 닫힌 괄호 그리고 스택은 비어있는 상태이기때문에 무조건 vps가 될 수 없다. 따라서 else에 바로 break을 해줘도 되지만 이 경우 NO를 어떻게 출력해야하는지 모르겠어서 포기했다..
틀린 코드
#include<iostream>
#include<stack>
using namespace std;
int t , n;
string vps;
stack<char>vp;
int main() {
cin >> t;
for (int k = 0; k < t; k++) {
cin >> vps;
for (int i = 0; i < vps.size(); i++) {
if (vps[i] = '(')
vp.push(vps[i]);
else {
if (!vp.empty()) {
vp.pop();
}
}
}
if(vp.empty())
cout << "YES" << "\n";
else
cout << "NO" << "\n";
}
}
- 처음에는 for(int k =0; k < t; k++) 대신 while문을 사용했었다. while(t>0)으로 했었는데 마지막에 t--를 안 해서 반복문이 돌아가지 않았다.
- else문 안에 if문의 짝이 없어서 제대로 작동하지 않았던 것 같다.
- 또 else문 안에 조건이 부족했던 것 같다. 처음에 ')' 닫힌 괄호가 들어올 경우에를 대비하지 않았다.
- 제일 충격인 것은 if문 조건안에 등호가 두개 들어가야하는데 하나만 썼다.. 최악..
한 문제에 너무 오랜시간을 들이지 않으려고 했지만 그게 잘 안 된다.
나는 내가 모르면 답답해서 꼭 주변의 도움을 받으려고 하는 것 같다.
앞으로는 안되면 처음부터 천천히 코드를 읽어 입력을 하나하나 그려서 해봐야겠다고 생각했다.
화이팅
'공부' 카테고리의 다른 글
BOJ 10773 해결과 개선 (0) | 2022.01.13 |
---|---|
BOJ 11004 해결, 시간 초과 (0) | 2022.01.13 |
BOJ 11365 3가지 풀이와 고찰 (0) | 2022.01.10 |
BOJ 1475 해결과 고찰 (9) | 2022.01.07 |
BOJ 10808 (0) | 2022.01.06 |