반응형
programmers.co.kr/learn/courses/30/lessons/76502
간단한 스택, 구현 문제였습니다.
풀이방법
1. 왼쪽으로 회전시킨다는 의미는 가장 끝에있는 문자열을 처음으로 위치시키고 0번쨰 ~ size-1까지를 그 다음에 위치시키는 것입니다. 회전한 문자열을 반환하는 함수를 만들어줍니다.
2. 올바른 문자열인지 check해주는 함수를 만들어 줍니다. 여는 괄호라면 stack에 해당 문자열을 push해줍니다. 닫는 괄호라면 다음을 수행합니다. 먼저 여는 괄호가 없는데 닫는 괄호가 나왔다면 0을 반환합니다. stack이 비어있을 때 stack.top()을 해서 접근하면 segmentation fault이므로 !empty()인경우에 검사해줍니다. 현재 stack의 top이 여는 괄호고 맞는 짝의 s문자열이라면 stack을 pop해줍니다.
이를 s의 길이만큼 수행했을 때 스택이 비었다면 1, 아니라면 0을 반환합니다.
3. 1,2순으로 s의 문자열 길이만큼 수행하고 정답을 반환합니다.
Code
#include <bits/stdc++.h>
using namespace std;
string rotateString(string s){
string tmp = "";
tmp += s[s.size()-1];
tmp += s.substr(0,s.size()-1);
return tmp;
}
int isRightBracket(string s){
stack <char> st;
for(int i = 0; i < s.size(); i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{') st.push(s[i]);
else{
if(st.empty()) return 0;
if(!st.empty() && st.top()=='(' && s[i] == ')') st.pop();
if(!st.empty() && st.top()=='{' && s[i] == '}') st.pop();
if(!st.empty() && st.top()=='[' && s[i] == ']') st.pop();
}
}
if(st.empty()) return 1;
return 0;
}
int solution(string s) {
int answer = 0;
int size = s.size();
for(int i = 0; i < size; i++){
if(isRightBracket(s)) answer++;
s = rotateString(s);
}
return answer;
}
'Algorithm > 자료구조' 카테고리의 다른 글
(C++) - 백준(BOJ) 11652번 : 카드 답 (0) | 2021.05.01 |
---|---|
(C++) - 백준(BOJ) 17298번 : 오큰수 답 (0) | 2021.05.01 |
(C++) - 백준(BOJ) 1918번 : 후위 표기식 (0) | 2021.04.14 |
(C++) - 프로그래머스(2018 KAKAO BLIND RECRUITMENT[1차]) : 캐시 (0) | 2021.04.13 |
(C++) - 백준(BOJ) 5639번 : 이진 검색 트리 (0) | 2021.03.18 |