본문 바로가기
공부

BOJ 9012 해결과 고찰.....(최악)

by 뜨응 2022. 1. 12.
제일 최악이었다.. 문제 푸는데 너무 오래걸렸을 뿐더러 자꾸 틀려서 너무 답답했다...
이번엔 틀렸던 코드도 가져왔다.

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