D+10, 11 괄호 회전하기

초록귤·2024년 12월 4일
1

100일프로젝트

목록 보기
8/42
post-thumbnail

문제

다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
(), [], {} 는 모두 올바른 괄호 문자열입니다.
만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
s의 길이는 1 이상 1,000 이하입니다.

풀이

function solution(s) {
    const leftArr=['[','(','{']
    const rightArr=[']',')','}']
    let count = 0
    
    for(i=0; i<s.length; i++){
        const rotate = s.slice(i) + s.slice(0,i)
        const stack =[]
        let isCorrect = true
        for(j=0; j<s.length; j++){
            if(leftArr.includes(rotate[j])){
                stack.push(rotate[j])
            }
            else if(stack[stack.length-1]=== '('&& rotate[j]===')') {stack.pop();}
            else if(stack[stack.length-1] === '{'&& rotate[j]==='}') {stack.pop();}
            else if(stack[stack.length-1]=== '['&& rotate[j]===']') {stack.pop();}
            else {isCorrect = false; break; }
        }
        if(isCorrect && !stack.length){
            count++;
        }
    }
    return count;
}

Array.slice(begin[,end])

  • slice 메서드는 어떤 배열의 begin부터 end까지 (end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반환
  • 원본 배열은 바뀌지 않음
    begin : 0을 시작으로 추출하는 시작점. 음수 인덱스는 배열의 끝에서부터 길이
    slice(-2)는 배열에서 마지막 . 두개의 엘리먼트 추출
    undefined인 경우엔, 0번 인덱스부터 slice한다.
    begin이 배열 길이보다 큰 경우, 빈 배열 반환

end : slice는 end 인덱스 제외하고 추출
slice()는 원본을 대체하지 않음. 원본 배열에서 요소의 얕은 복사본을 반환.

profile
초록색 귤이 노랑색으로 익어가듯, 실력이 익어가기 위해 노력하는 개발자 초록귤입니다.

0개의 댓글

관련 채용 정보