본문 바로가기
코딩테스트

프로그래머스 괄호 회전하기

by 희안 2021. 4. 21.

 

요것도 레벨2 프로그래머스 문제이다.

이건 이제 괄호를 하나씩 옆으로 옮기면서 괄호가 완전한지 보면 된다.

괄호가 3개여서 스택에 괄호별로 번호를 매겨서 성공했다.

코드가 왜이렇게 길어지는지 모르겠지만... ㅠㅠ

아 0,1,2를 하나씩 if문으로 하지말고 다르게 해봐야겠다.

#include <string>
#include <vector>
#include <stack>

using namespace std;

int solution(string s) {
    
    int answer = 0;
    string str = s;
	
	for (int i = 0; i < str.length(); i++) {
		stack<int> s;
		int pass = true;
		for (int j = i; j < i + str.length(); j++) {
			if (!pass) break;
			int here = j;
			if (j >= str.length()) here -= str.length();
			//cout << here << " ";
			if (str[here] == '(' || str[here] == '{' || str[here] == '[') {
				if (str[here] == '(') {
					s.push(0);
				}
				else if (str[here] == '{') {
					s.push(1);
				}
				else {
					s.push(2);
				}
			}
			else if (str[here] == ')' || str[here] == '}' || str[here] == ']') {
				if (str[here] == ')') {
					if (!s.empty()) {
						if (s.top() == 0) {
							s.pop();
						}
						else {
							pass = false;
							break;
						}
					}
					else {
						pass = false;
						break;
					}
				}
				else if (str[here] == '}') {
					if (!s.empty()) {
						if (s.top() == 1) {
							s.pop();
						}
						else {
							pass = false;
							break;
						}
					}
					else {
						pass = false;
						break;
					}
				}
				else {
					if (!s.empty()) {
						if (s.top() == 2) {
							s.pop();
						}
						else {
							pass = false;
							break;
						}
					}
					else {
						pass = false;
						break;
					}
				}
			}
		}
		//cout << endl;
		if (pass&&s.empty()) {
			//cout << i << endl;
			answer++;
		}
		int size_ = s.size();
		for (int k = 0; k < size_; k++) {
			s.pop();
		}
	}
    return answer;
}

댓글