티스토리 뷰

문제

programmers.co.kr/learn/courses/30/lessons/76502

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

 

풀이

s를 왼쪽으로 회전시키는건 substr을 사용하여 해결할 수 있고, 회전한 문자열 s에 대해 괄호 쌍 여부 판별은 문자열 s에 대해 스택을 사용하여 구현할 수 있습니다. 시험중에 푼 코드이기에 괄호 처리 여부가 지저분하므로 추후에 정리해서 다시올리도록 하겠습니다..

 

코드

#include <bits/stdc++.h>
using namespace std;

const char o[] = { '(','[','{' };
const char c[] = { ')',']','}' };

bool can(string x) {
	vector<int> st;
	for (char op : x) {
		int openidx = -1;
		for (int i = 0; i < 3; i++) {
			if (op == o[i]) {
				openidx = i;
				break;
			}
		}
		if (st.empty()) {
			if (openidx < 0) return 0;
			else st.push_back(openidx);
		}
		else {
			if (openidx < 0) {
				int closedidx = -1;
				for (int i = 0; i < 3; i++) {
					if (op == c[i]) {
						closedidx = i;
						break;
					}
				}
				if (st.back() != closedidx) return 0;
				else st.pop_back();
			}
			else st.push_back(openidx);
		}
	}
	return (st.empty() ? 1 : 0);
}

int solution(string s) {
	int n = s.size(), answer = 0;
	for (int i = 0; i < n; i++) {
		if (can(s)) answer++;
		s = s.substr(1) + s[0];
	}
	return answer;
}
댓글