안녕하세요. 이번 포스팅에서는 괄호 회전하기 문제를 풀어보도록 하겠습니다.
해당 문제는
https://programmers.co.kr/learn/courses/30/lessons/76502
위 링크를 통해 확인하실 수 있습니다.
c++에 rotate라는 유용한 함수가 있습니다.
배열의 값을 하나씩 뒤로 미룰 수 있는 기능을 제공합니다.
이 rotate함수를 사용하여, 배열의 첫 원소를 맨 뒤로 미뤄가면서 현재 문자열이 올바른 괄호 열인지 아닌지 판단해주었습니다.
올바른 괄호열 판단에는 stack 자료구조를 사용하였습니다.
1. '(', '{', '['의 문자열이면, stack에 push를 합니다.
2. ')', '}', ']'이면
2.1) stack이 비어있으면 false를 리턴합니다.
2.2) stack이 비어있지 않다면 top과 매칭 되는지 확인합니다. 매칭 된다면 pop을 진행합니다.
3. 반복
<소스 코드>
#include <bits/stdc++.h>
using namespace std;
bool check(string s) {
stack<char> stk;
for(int i = 0; i < s.size(); i++) {
if(s[i] == '(' || s[i] == '{' || s[i] == '[') stk.push(s[i]);
else {
if(stk.size() == 0) return false;
if(s[i] == ')' && stk.top() == '(') stk.pop();
else if(s[i] == '}' && stk.top() == '{') stk.pop();
else if(s[i] == ']' && stk.top() == '[') stk.pop();
}
}
if(stk.size()) return false;
return true;
}
int solution(string s) {
int answer = 0;
for(int x = 0; x < s.size(); x++) {
rotate(s.begin(), s.begin()+1, s.end());
if(check(s)) answer++;
}
return answer;
}
*저의 글에 대한 피드백이나 지적은 언제나 환영합니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 위클리 챌린지 10 교점에 별 만들기 (0) | 2021.10.17 |
---|---|
[Programmers] [3차] 파일명 정렬 (0) | 2021.10.08 |
[Programmers] 위클리 챌린지 9 (+ 위클리 챌린지 8) (0) | 2021.10.05 |
[Programmers] 행렬 테두리 회전하기 (0) | 2021.10.05 |
[Programmers] 모두 0으로 만들기 (0) | 2021.10.05 |