[프로그래머스] 올바른 괄호 - JavaScript

2025. 1. 9. 15:30·알고리즘

문제 설명

문제 출처

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

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항
  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예 설명

입출력 예 #1,2,3,4
문제의 예시와 같습니다.

 

풀이 방법

  • push, pop 메서드를 사용하지 않고 직접 idx를 관리해서 풀어봤다.
  • 스택을 이용해서, idx 기준으로 여는 괄호일 때는 push를, 아닐 때는 pop을 사용했다.
  • 작업 이후, idx가 0이면 쌍이 다 맞는것이니 true를, 아니면 false를 리턴하면 끝

예외 처리

  • 초기 값이 ')' 닫는 괄호이면 애초부터 옳지 않으므로 false를 리턴한다.
  • 이후 반복문 진행 과정에서도 다음 값이 닫는 괄호인데 idx가 0이라면 쌍이 맞지 않는 것이므로 false를 리턴한다.

풀이 코드

function solution(s){
    const array = s.split("");
    
    //닫는괄호부터 시작이면 바로 false
    if(array[0] === ')') return false;
    
    //스택으로 활용할 배열
    let stack = [];
    let idx = 0;
    
    array.forEach((e) => {
        //여는 괄호면 삽입
        if(e === '('){
            stack[idx++] = e;
        }
        else if(e === ')'){
            //길이가 0이라면 옳지않은 괄호이므로
            if(idx <= 0){
                return false;
            }
            else {
                //닫는 괄호면 idx 뒤로
                stack[--idx];
            }
        }
    })
    
    //반복문이 끝나고, stack의 idx가 0이면 옳은 괄호
    if(idx === 0) return true;
    else return false;
}

결과

회고

  • 스택을 오랫동안 안쓰다가 직접 구현하려하니 헷갈리는 부분이 있었다... 처음에는 shift를 쓰려다가 이러면 배열순환이 완벽하게 돌아가지 않기 때문에 스택을 이용했다.
  • 스택, 큐의 원리 및 구현 방법을 다시 공부해보고, Js에서 직접 구현해보면서 감을 익혀봐야할 것 같다.
저작자표시 비영리 동일조건 (새창열림)

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

[프로그래머스] 표 편집 - Java  (2) 2025.01.14
[백준] 14500 테트로미노 - Java  (0) 2025.01.13
[프로그래머스] 최댓값과 최솟값 - JavaScript  (3) 2025.01.09
[프로그래머스] PCCP 기출문제 1- 동영상 재생기, JavaScript  (1) 2025.01.07
[프로그래머스] 기사단원의 무기, JavaScript  (1) 2025.01.06
'알고리즘' 카테고리의 다른 글
  • [프로그래머스] 표 편집 - Java
  • [백준] 14500 테트로미노 - Java
  • [프로그래머스] 최댓값과 최솟값 - JavaScript
  • [프로그래머스] PCCP 기출문제 1- 동영상 재생기, JavaScript
BGK97
BGK97
사용자 입장에서 한번 더 생각하는 개발자로 성장하고 싶은 사람입니다.
  • BGK97
    꾸준히, 열심히
    BGK97
  • 전체
    오늘
    어제
    • 분류 전체보기 (111)
      • 알고리즘 (73)
      • 컴퓨터 구조와 운영 체제(책) (8)
      • 네트워크 (5)
      • React (10)
      • 경험한 에러들 (3)
      • HTML, CSS, JavaScript (8)
      • 자료구조 (1)
      • 이것이 컴퓨터 과학이다(책) (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BGK97
[프로그래머스] 올바른 괄호 - JavaScript
상단으로

티스토리툴바