[알고리즘] 괄호 회전하기

2023. 1. 23. 13:37·알고리즘
반응형

문제 설명

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

  • (), [], {} 는 모두 올바른 괄호 문자열입니다.
  • 만약 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

입출력 예 설명

입출력 예 #1

  • 다음 표는 "[](){}" 를 회전시킨 모습을 나타낸 것입니다.
x s를 왼쪽으로 x칸만큼 회전 올바른 괄호 문자열?
0 "[](){}" O
1 "](){}[" X
2 "(){}[]" O
3 "){}[](" X
4 "{}[]()" O
5 "}[](){" X
  • 올바른 괄호 문자열이 되는 x가 3개이므로, 3을 return 해야 합니다.

입출력 예 #2

  • 다음 표는 "}]()[{" 를 회전시킨 모습을 나타낸 것입니다.
x s를 왼쪽으로 x칸만큼 회전 올바른 괄호 문자열?
0 "}]()[{" X
1 "]()[{}" X
2 "()[{}]" O
3 ")[{}](" X
4 "[{}]()" O
5 "{}]()[" X
  • 올바른 괄호 문자열이 되는 x가 2개이므로, 2를 return 해야 합니다.

입출력 예 #3

  • s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.

입출력 예 #4

  • s를 어떻게 회전하더라도 올바른 괄호 문자열을 만들 수 없으므로, 0을 return 해야 합니다.

나의 풀이

const CHECK = {
    "[": "]",
    "{": "}",
    "(": ")"
}

function solution(s) {
    var answer = 0;
    const array = s.split("")
    
    for(let i = 0; i < array.length; i++) {
        array.push(array.shift());
        const temp = [];
        let isCheck = true;
        
        for(let j = 0; j < array.length; j++) {
            const str = array[j];
            if(!CHECK[str]) {
                if(CHECK[temp.pop()] !== str) {
                    isCheck = false
                    break;
                }
            } else {
                temp.push(str);
            }
        }
        
        if(temp.length === 0 && isCheck) answer ++;
        
        
    }
    
    return answer;
}
반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘' 카테고리의 다른 글

[알고리즘] n^2 배열 자르기  (0) 2023.01.30
[알고리즘] 롤케이크 자르기  (0) 2023.01.24
[알고리즘] 할인 행사  (0) 2023.01.20
[알고리즘] 테이블 해시 함수  (0) 2023.01.19
[알고리즘] 마법의 엘리베이터  (0) 2023.01.18
'알고리즘' 카테고리의 다른 글
  • [알고리즘] n^2 배열 자르기
  • [알고리즘] 롤케이크 자르기
  • [알고리즘] 할인 행사
  • [알고리즘] 테이블 해시 함수
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    덤프
    Node.js
    리얼클래스
    영어회화
    ReactNative
    타입스크립트
    react
    CCNA
    javascript
    typescript
    next.js
    네트워크
    자바스크립트
    알고리즘
    리액트
    Docker
    식물
    리얼학습일기
    webpack
    타일러영어
    영어독학
    프로그래머스
    CSS
    Babel
    다이소
    네이버 부스트캠프
    redux
    바질 키우기
    바질
    ChatGPT
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[알고리즘] 괄호 회전하기
상단으로

티스토리툴바