KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (487)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (432)
      • 백준 (187)
      • Programmers (105)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • Level 2
  • codeup
  • 백준
  • 그래프
  • 제코베 JS 100제
  • C++
  • C
  • LeetCode
  • Level 1
  • programmers
  • js
  • Level 0
  • recursion
  • 정렬
  • tree
  • 수학
  • 문자열
  • string
  • 다이나믹 프로그래밍
  • Level1

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/제코베 JS 100제

제코베 JS 100제 / 53 / 괄호 문자열

2022. 8. 24. 20:47

괄호 문자열이란 괄호 기호인 '{', '}', '[', ']', '(', ')' 와 같은 것을 말한다. 그중 괄호의 모양이 바르게 구성된 문자열을 바른 문자열, 그렇지 않은 문자열을 바르지 않은 문자열이라 부르도록 하자.

 

(())와 같은 문자열은 바른 문자열이지만 ()())와 같은 문자열은 바르지 않은 문자열이다.

 

입력으로 주어진 괄호 문자열이 바른 문자열인지 바르지 않은 문자열인지 "YES"와  "NO"로 구분된 문자열을 출력해보자.

 

 

function isValidBracketString(str) {
  if (!str.length) return; // 빈 문자열일 경우

  let left_bracket = [
    ["(", 0],
    ["{", 0],
    ["[", 0],
  ];
  let right_bracket = [
    [")", 0],
    ["}", 0],
    ["]", 0],
  ];

  for (const c of str) {
    // 괄호가 아닐 경우
    if (!"(){}[]".includes(c)) return false;

    for (let i = 0; i < left_bracket.length; i++) {
      // 닫는 괄호가 여는 괄호보다 먼저 나왔을 경우
      if (right_bracket[i][1] > left_bracket[i][1]) return false;
      if (left_bracket[i][0] === c) left_bracket[i][1]++;
      else if (right_bracket[i][0] === c) right_bracket[i][1]++;
    }
  }

  for (let i = 0; i < left_bracket.length; i++) {
    // 괄호 종류에 맞는 쌍의 갯수가 맞을 경우
    if (left_bracket[i][1] === right_bracket[i][1]) continue;
    else return false;
  }

  return true;
}

const str = "(){}[]"; // true
/*
    "(]" // 같은 종류의 괄호가 아니므로 false
    ")(" // 닫힌 괄호가 먼저 나왔으므로 false
    "())" // 열린 괄호와 닫힌 괄호의 짝이 맞지 않으므로 false
*/    

const result = isValidBracketString(str) ? "YES" : "NO";
console.log(result);
저작자표시 (새창열림)

'PS > 제코베 JS 100제' 카테고리의 다른 글

제코베 JS 100제 / 55 / 하노이의 탑  (0) 2022.08.26
제코베 JS 100제 / 54 / 연속되는 수  (0) 2022.08.24
제코베 JS 100제 / 52 / quick sort  (0) 2022.08.24
제코베 JS 100제 / 51 / merge sort를 만들어보자  (0) 2022.08.24
    'PS/제코베 JS 100제' 카테고리의 다른 글
    • 제코베 JS 100제 / 55 / 하노이의 탑
    • 제코베 JS 100제 / 54 / 연속되는 수
    • 제코베 JS 100제 / 52 / quick sort
    • 제코베 JS 100제 / 51 / merge sort를 만들어보자
    KimMinJun
    KimMinJun

    티스토리툴바