문제
소스코드
#include <string>
#include <vector>
#include<deque>
#include<stack>
using namespace std;
bool RotateArray(int weight,std::deque<char> deque) {
for (int i = 0; i < weight; ++i) {
auto front = deque.front();
deque.pop_front();
deque.push_back(front);
}
if (deque[0] == '}' || deque[0] == ')' || deque[0] == ']') return false;
std::stack<char> stack{};
while (deque.empty() == false) {
auto front = deque.front();
deque.pop_front();
if (front == '[' || front == '{' || front == '(') {
stack.push(front);
}
else if (stack.empty() == false) {
if (stack.top() == '[' && front == ']') {
stack.pop();
}
else if (stack.top() == '{' && front == '}') {
stack.pop();
}
else if (stack.top() == '(' && front == ')') {
stack.pop();
}
}
}
return stack.size() == 0 ? true : false;
}
int solution(string s) {
int answer = 0;
std::deque<char> deque{};
for (int i = 0; i < s.size(); ++i) {
deque.emplace_back(s[i]);
}
for (int i = 0; i < s.size(); ++i) {
if (RotateArray(i, deque) == true) {
++answer;
}
}
return answer;
}
후기
이 문제는 x만큼 왼쪽으로 밀어낸 array가 올바른 괄호 형태인지 판단하는 문제이다.
먼저 deque컨테이너에 괄호 값을 넣고 x만큼 움직인다.
그 후 Stack을 통해 올바른 괄호 형태인지 파악한다. 왼쪽 괄호 (, {, [ 형태이면 stack에 push 오른쪽이라면 pop 하는 형태를 통해 해당 Stack이 0이면 올바른 형태 0이 아니라면 올바르지 못한 괄호라는 것을 판단할 수 있다.
출처 및 레퍼런스
문제 링크: 코딩테스트 연습 - 괄호 회전하기 | 프로그래머스 (programmers.co.kr)
관련 글
[온라인 코딩/큐(Queue)와 스택(Stack)] - [구름 IDE] 괄호 짝 맞추기 ★★★★☆
'온라인 코딩 > 큐(Queue)와 스택(Stack)' 카테고리의 다른 글
[백준] 2493번 탑 (0) | 2020.09.09 |
---|---|
[백준] 10409번 서버 (0) | 2020.08.11 |
[백준] 1966번 프린터 큐 (0) | 2020.07.29 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2020.05.18 |
[백준] 10828번 스택 (0) | 2020.03.23 |