
아래 프로그래머스 로고를 클릭하면 해당 문제로 이동합니다 😀
이건 브루트포스라고 봐야하는건가 ... ?
각 회전마다 올바른 괄호 문자열인지 모두 체크를 해서 올바른 괄호 문자열이라면 카운트를 올려주면 된다.
괄호 검사는 isvalid(s) 를 통해 작성해줬다.
문자열에서 문자를 하나씩 뜯어서 검사하면 된다.
(, {, [면 스택에 넣기마지막에 stack이 비어있는지에 대한 True/False를 리턴해주면 된다.
def is_valid(s):
stack = []
bracket_map = {')': '(', ']': '[', '}': '{'}
for ch in s:
if ch in '([{':
stack.append(ch)
else:
if not stack or stack[-1] != bracket_map[ch]:
return False
stack.pop()
return not stack
def solution(s):
count = 0
n = len(s)
for i in range(n):
rotated = s[i:] + s[:i]
if is_valid(rotated):
count += 1
return count
const isValid = (s) => {
let stack = [];
const bracketMap = {')': '(', ']': '[', '}': '{'};
for(const ch of s){
if('([{'.includes(ch)) stack.push(ch)
else {
if(stack.length === 0 || stack[stack.length - 1] !== bracketMap[ch]) return false;
stack.pop();
}
}
return stack.length === 0;
}
function solution(s) {
let cnt = 0;
for(let i = 0 ; i < s.length ; i++){
const rotated = s.slice(i) + s.slice(0, i);
if(isValid(rotated)) cnt++;
}
return cnt;
}
