문제 설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
- (), [], {} 는 모두 올바른 괄호 문자열입니다.
- 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
- 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- s의 길이는 1 이상 1,000 이하입니다.
입출력 예
s | result |
"[](){}" | 3 |
"}]()[{" | 2 |
"[)(]" | 0 |
"}}}" | 0 |
나의 풀이
function solution(s) {
let answer = 0;
const sBox = [];
const splitS = s.split('')
for(let i=0; i<s.length; i++){
const firstStr = splitS.shift();
splitS.push(firstStr);
sBox.push(splitS.join(''))
}
let stack =[];
for(let i=0; i<sBox.length; i++){
for(let j=0; j<sBox[i].length; j++){
switch(sBox[i][j]){
case '[':
stack.push('[')
break
case '(':
stack.push('(')
break
case '{':
stack.push('{')
break
case ']':
if(stack[stack.length-1] === '['){
stack.pop();
}else{
stack.push('[')
}
break
case ')':
if(stack[stack.length-1] === '('){
stack.pop();
}else{
stack.push('(')
}
break
case '}':
if(stack[stack.length-1] === '{'){
stack.pop();
}else{
stack.push('{')
}
break
}
}
if(stack.length === 0){
answer++
}
stack =[];
}
return answer;
}
알고리즘 Stack을 활용해서 풀었습니다.
'코딩 테스트 풀이 🛠' 카테고리의 다른 글
[Leet Code] 2677. Chunk Array (0) | 2024.02.09 |
---|---|
이메일 인증번호 구현 With Next.Js & nodeMailer (0) | 2024.01.30 |
[프로그래머스] 귤 고르기 (0) | 2024.01.14 |
[프로그래머스] 추억 점수 (0) | 2024.01.12 |
[프로그래머스] 카펫 (0) | 2023.11.26 |