728x90
반응형
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/76502
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
👩💻 코드
#include <string>
#include <vector>
#include <stack>
#include <unordered_map>
using namespace std;
bool isValid(string s) {
stack<char> st;
unordered_map<char, char> matching_bracket = {{')', '('}, {']', '['}, {'}', '{'}};
for (auto c : s) {
switch (c) {
case '(':
case '[':
case '{':
st.push(c);
break;
case ')':
case ']':
case '}':
if (!st.empty() && st.top() == matching_bracket[c]) {
st.pop();
} else {
return false;
}
break;
default:
break;
}
}
return st.empty();
}
int solution(string s) {
int answer = 0;
int n = s.size();
s += s;
for(int i=0; i<n; i++){
string shiftedStr;
for(int j=i; j<i+n; j++){
shiftedStr += s[j];
}
if(isValid(shiftedStr)){
answer++;
}
}
return answer;
}
📝 풀이
올바른 괄호 문자열을 판단하는 isValid 함수를 구현했다.
왼쪽 괄호인 경우에는 stack에 push한다.
오른쪽 괄호인 경우에는 짝이 맞는 괄호가 stack의 top인지 비교 후 맞다면 pop하고 다르다면 false를 return한다.
문자열을 끝까지 확인 후 stack에 괄호가 남아 있다면 짝이 맞지 않으니 st.empty()를 return한다.
회전하는 문자열을 비교할수 있도록 s문자열에 s문자열을 추가했다.
회전하는 문자열은 0부터 n, 1부터 n+1, 2부터 n+2... 방식으로 shiftedStr에 저장했다.
최종 shiftedStr에 아까 구현한 isValid 함수 매개 변수로 실행시켜 true인 경우에만 answer를 증가시킨다.
모든 코드를 실행시키고 answer을 return 한다.
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 할인 행사 (0) | 2024.07.25 |
---|---|
[프로그래머스] n^2 배열 자르기 (0) | 2024.07.25 |
[프로그래머스] 연속 부분 수열 합의 개수 (0) | 2024.07.23 |
[프로그래머스] 귤 고르기 (0) | 2024.07.22 |
[프로그래머스] 예상 대진표 (0) | 2024.07.21 |