jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • safari invalid date error
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • 깃 이전 커밋에서 새 브랜치 만들기
  • 퀵정렬 자바스크립트
  • 25632 소수 부르기 게임
  • 억억단을 외우자 javascript
  • 자바스크립트 배열의 특수함
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 자바스크립트 이벤트 위임
  • 리코쳇 로봇 javascript
  • 덧칠하기 javascript
  • 대충만든자판 javascript
  • 1753 최단경로 javascript
  • 자바스크립트 커링
  • 계수정렬 자바스크립트
  • JavaScript
  • 병합정렬 자바스크립트
  • fetch 취소하기
  • 자바스크립트 채팅방 스크롤
  • javascript use strict
  • 자바스크립트 모듈 시스템
  • 가사 검색 자바스크립트
  • 백준 자바스크립트 입력 템플릿
  • 외벽 점검 javascript
  • 리액트 프로젝트 디버깅하기
  • 백준 17406 nodeJS
  • 13460 javascript nodejs
  • safari Date format NaN
  • 프로그래머스 숫자카드나누기 javascript
  • 자바스크립트 sort는 왜 그모양일까

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae
DS & Algorithm/programmers

[프로그래머스] 괄호 회전하기 - 자바스크립트

[프로그래머스] 괄호 회전하기 - 자바스크립트
DS & Algorithm/programmers

[프로그래머스] 괄호 회전하기 - 자바스크립트

2021. 6. 27. 03:48

문제

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

 

코드

function solution(s) {
  if (s.length % 2 === 1) return 0;
  const sLen = s.length;
  let answer = 0;

  for (let i = 0; i < sLen; i++) {
    let str = s.slice(i) + s.slice(0, i);
    const stack = [];
    let flag = 1;
    for (let n of str) {
      if (n === "(" || n === "{" || n === "[") stack.push(n);
      else {
        const bracket = stack.pop();
        if (n === ")" && bracket === "(") continue;
        if (n === "}" && bracket === "{") continue;
        if (n === "]" && bracket === "[") continue;
        flag = 0;
        break;
      }
    }
    if (flag) answer++;
  }
  return answer;
}

 

풀이

 

문자열 s에서 왼쪽으로 0~s의 길이의 칸 만큼 회전시킨 각각의 문자열들에 대해 올바른 괄호 문자열인 개수를 출력해야 한다.

 

올바른 괄호 문자열은 아래 조건을 만족한다.

 

 

스택 자료구조와 LIFO(Last In First Out) 개념을 이용한다.

 

문자열 s를 x만큼 왼쪽으로 회전시킨 문자열 str을 선언한다.

문자열 str을 검증할 때 마다 새로운 스택 배열을 선언한다.

올바른 괄호가 아닐 때 빠르게 문자열 str 검증을 끝낼 수 있도록 flag 변수를 선언한다.

 

여는 괄호가 나오면 스택에 추가해주고
닫는 괄호가 나오면 스택에서 짝에 해당하는 괄호를 제거한다.

 

만약 제거하려는 괄호가 짝이 맞지 않는다면 올바른 괄호 문자열이 아니므로, flag 값을 바꿔주고 즉시 종료한다.

 

flag 값이 변하지 않았다면 올바른 괄호 문자열이므로 카운트한다.

 

 

추가로 만약 문자열 s의 크기가 홀수라면, 어떤 경우에도 올바른 괄호 문자열이 될 수 없으므로 입력을 받은 즉시 종료시킬 수 있다.

저작자표시 (새창열림)

'DS & Algorithm > programmers' 카테고리의 다른 글

[프로그래머스] 방금그곡 - 자바스크립트  (0) 2021.06.28
[프로그래머스] 쿼드 압축 후 개수 세기 - 자바스크립트  (0) 2021.06.28
[프로그래머스] 압축 - 자바스크립트  (0) 2021.06.27
[프로그래머스] 영어 끝말잇기 - 자바스크립트  (0) 2021.06.27
[프로그래머스] 파일명 정렬 - 자바스크립트  (0) 2021.06.24
  • 문제
  •  
  • 코드
  •  
  • 풀이
'DS & Algorithm/programmers' 카테고리의 다른 글
  • [프로그래머스] 방금그곡 - 자바스크립트
  • [프로그래머스] 쿼드 압축 후 개수 세기 - 자바스크립트
  • [프로그래머스] 압축 - 자바스크립트
  • [프로그래머스] 영어 끝말잇기 - 자바스크립트
jiho_bae
jiho_bae
하루에 한 걸음씩

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.