페블_
반짝이는 시냅스
페블_
전체 방문자
오늘
어제
  • 전체글 보기 (96)
    • QA (0)
    • 프로젝트 회고 (4)
    • 프로젝트 과정 기록 (12)
    • UI 구현 연구일지 (8)
    • Front-end (31)
      • Javascript (7)
      • CSS (10)
      • React (5)
      • Typescript (3)
      • Nextjs (3)
      • 스타일링 라이브러리 (3)
    • Back-end (0)
      • Express (0)
      • DB (0)
    • CS (0)
      • 자료구조 & 알고리즘 (0)
    • CI&CD (1)
    • 툴 사용법 (4)
      • Git (1)
      • Library&패키지 (2)
      • 기타 개발관련 (1)
    • 알고리즘 이론 & 풀이 (36)
      • 백준(BOJ) (14)
      • 프로그래머스 (22)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 토이프로젝트
  • storybook
  • UI 컴포넌트
  • 알고리즘
  • chartjs
  • react
  • eslint
  • 백준
  • TypeScript
  • JS
  • 캐러셀
  • 개발블로그_시작
  • 선형대수학
  • 시리즈_표지
  • Python
  • 파이썬
  • emotion
  • 생각

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
페블_

반짝이는 시냅스

알고리즘 이론 & 풀이/프로그래머스

프로그래머스 Lv.2 | 괄호 회전하기 js

2023. 8. 11. 00:45

문제

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

 

 

풀이

  • x만큼 왼쪽으로 회전한다는 것은 문자열을 0부터 x까지 잘라서, x+1 이후의 문자열의 꽁무니에 붙이는 것과 같다.
    substring으로 문자열을 양분해서 앞쪽 것을 뒤에 붙여주자.
  • 괄호의 열림, 닫힘 여부는 stack을 사용하고, 괄호의 짝을 확인하기 위해 Map object에 짝을 저장해놓는다.
  • 0부터 x번까지 모든 회전하는 경우의 수를 구해야 하므로 회전은 바깥for문이 담당한다.
  • 본인이 왼쪽 괄호인지는 Map에 key가 존재하는지로 확인하고, 왼쪽 괄호라면 stack에 집어넣는다.
  • 만약 Map에 없다면 오른쪽 괄호이므로 stack에 있던 것을 pop해서 본인의 짝인지 확인해보고, 짝이 아니라면 올바른 회전이 아니므로 break를 한다.
  • 만약 모든 괄호가 유효하다면 count++를 하고, 다음 회전을 검사하러 간다.
    // 회전이라는 것은 slice해서 끝에 다시 붙이기 - substr
    // 왼쪽 거 만나먼 push, 오른쪽거 나오면 pop해서 본인 짝인지 확인?
    // 짝인지 확인하는 방법은 Map으로
    // 짝이 아니라면 break;
    // 끝까지 pop 순조롭게 길이 0되면 종료하고 count++
    // x는 for문으로 0부터 < s.length까지
    function solution(s) {
    const pairs = new Map([
        ['[', ']'],
        ['(', ')'],
        ['{', '}']
    ]);
    let count = 0;
    for(let x = 0; x < s.length; x++) {
        const rotate = (s.substring(x + 1) + s.substring(0, x + 1)).split('');
        const stack = [];
        for(let i = 0; i < rotate.length; i++) {
            if(pairs.has(rotate[i])) {
                stack.push(rotate[i]);
            } else {
                if(pairs.get(stack.pop()) !== rotate[i]) {
                    break;
                }
            }
            if(i === rotate.length - 1 && stack.length === 0) count++;
        }
    }
    return count;
}

'알고리즘 이론 & 풀이 > 프로그래머스' 카테고리의 다른 글

프로그래머스 Lv.0 | 저주의 숫자 3  (0) 2023.09.02
프로그래머스 Lv.2 | 피보나치 수 js  (0) 2023.08.09
프로그래머스 Lv.2 | (스택/큐) 기능개발 js  (0) 2023.08.09
프로그래머스 Lv.1 | (스택/큐) 같은 숫자는 싫어 js  (0) 2023.08.09
프로그래머스 Lv.2 | (DFS) 타겟 넘버 js  (0) 2023.08.09
    '알고리즘 이론 & 풀이/프로그래머스' 카테고리의 다른 글
    • 프로그래머스 Lv.0 | 저주의 숫자 3
    • 프로그래머스 Lv.2 | 피보나치 수 js
    • 프로그래머스 Lv.2 | (스택/큐) 기능개발 js
    • 프로그래머스 Lv.1 | (스택/큐) 같은 숫자는 싫어 js
    페블_
    페블_

    티스토리툴바