https://school.programmers.co.kr/learn/courses/30/lessons/76502
이번 문제는 구현 문제였습니다.
📝 문제 풀이
1. 배열의 인덱스를 나머지로 생각하여 s를 왼쪽으로 한 칸 회전 (처음에는 s 그대로) ⭐️
2. 한 칸 회전된 괄호 문자열이 올바른 괄호 문자열인지 확인 (isCorrect 함수 호출)
- 여는 괄호((또는 [ 또는 {)이면 -> 스택에 push ({{{ 같은 경우를 위해서 bool 타입의 변수 사용)
- 닫는 괄호이면 -> 스택의 마지막 값이 같은 종류의 여는 괄호라면 pop
- 스택이 비어있고 한 번이라도 push 된 적이 있으면 true 반환
3. 반환 값이 true이면 answer 1 증가
👩🏻💻 C++ 코드
#include <string>
#include <vector>
#include <stack>
using namespace std;
bool isCorrect(string tmp) {
stack<char> st;
bool isPushed = false;
for (auto c: tmp) {
if (c == '(' || c == '[' || c == '{') {
st.push(c);
isPushed = true;
} else if (c == ')') {
if (!st.empty() && st.top() == '(') st.pop();
} else if (c == ']') {
if (!st.empty() && st.top() == '[') st.pop();
} else {
if (!st.empty() && st.top() == '{') st.pop();
}
}
if (st.empty() && isPushed) return true;
return false;
}
int solution(string s) {
int answer = 0;
for (int i=0; i<s.length(); i++) {
string tmp = " ";
// s를 왼쪽으로 한칸 회전
for (int j=i; j<i+s.length(); j++)
tmp += s[j % s.length()];
if (isCorrect(tmp)) answer += 1;
}
return answer;
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 네트워크 C++ (Lv.3) (0) | 2023.04.07 |
---|---|
[프로그래머스] 미로 탈출 C++ (0) | 2023.04.07 |
[프로그래머스] 빛의 경로 사이클 C++ (Lv.2) (0) | 2023.04.04 |
[프로그래머스] LV.1 공원 산책 C++ (0) | 2023.03.31 |
[프로그래머스] 호텔 방 배정 JavaScript (Lv.4) (0) | 2023.02.22 |