[프로그래머스] 괄호 회전하기 (Javascript)

박먼지·2022년 12월 3일
0

코딩테스트

목록 보기
2/23
post-thumbnail

💡 문제

https://school.programmers.co.kr/learn/courses/30/lessons/76502

문제 설명

다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.

  • (), [], {} 는 모두 올바른 괄호 문자열입니다.
  • 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
  • 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.

대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.

  • s의 길이는 1 이상 1,000 이하입니다.

내 풀이

function solution(s) {
    let str = s;
    let count = 0;
    let stack = [];
    
    for(let i = 0; i < s.length; i++){
        str = str.slice(1,s.length)+str[0]; // 맨 앞자리 문자를 맨 뒷자리로 옮김
        stack = [];
    for(let j = 0; j < s.length; j++){
        if(stack[stack.length-1]==='{' && str[j]==='}' || 
          stack[stack.length-1]==='[' && str[j]===']'||
           stack[stack.length-1]==='(' && str[j]===')' // 괄호 짝이 맞으면
          )
            stack.pop();  // stack에서 제거시켜주고
        else{
            stack.push(str[j]); // 아니면 stack에 추가
        }
    }
        if(stack.length===0) count++;  // stack 길이가 0이면 괄호 짝이 맞으므로 count
    }
    return count;
}

효율성 테스트 안하길래 이중 포문 돌림..
이번에도 냅다 for문이랑 if문 써서 해결했다 ^^;;;

profile
개발괴발

0개의 댓글