본문 바로가기
컴공생의 Knowledge/Algoritm Solution

[프로그래머스] 스택/큐 - 올바른 괄호 문제 풀이 (feat.JS)

by UIC 2022. 7. 21.
728x90

오늘은 프로그래머스에서 스택/큐 문제 중 올바른 괄호 문제 풀이를 시작해보겠습니다. 올바른 괄호 문제는 문제명만 봤을 때 감이 오는 문제입니다. 역시 스택/큐 문제로 출제될만한 문제로, 괄호가 올바르게 되어있는지 유무를 판단하여 반환하는 알고리즘을 만드는 문제로 보입니다. 그럼 올바른 괄호 문제 풀이 해보러 가겠습니다.

 

 

프로그래머스 > 스택/큐 > 올바른 괄호 문제 풀이

 

 

프로그래머스-스택/큐-올바른-괄호-문제정보

 

 

∋ 문제 정보

  • 문제명: 올바른 괄호
  • 문제 난이도: Level 2
  • 문제 푼 사람 수: 12861명
  • 사용 가능 언어: 7개 (JavaScript 사용)

 

 

 

 

∋ 문제 설명

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

예를 들어
 º "()()" 또는 "(())()" 는 올바른 괄호입니다.
 º ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

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

 

 

  • 주어진 입력 괄호로만 이루어진 문자열이 올바른지 여부 구하기
  • Input
    • s: 괄호로만 이루어진 문자열
  • Output: 괄호로만 이루어진 문자열(s)의 올바른지 여부 true/false

 

 

 

 

∋ 제한 사항

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

 

 

  • 문자열(s)의 길이 ≤ 100,000
  • 문자열 s는 '(', ')'로만 이루어져있다.

 

 

 

 

∋ 입출력 예

s answer
"()()" true
"(())()" true
")()(" false
"(()(" false

 

 

 

 

∋ 입출력 예 설명

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

 

 

 

 

∋ 알고리즘 만들기

1. 괄호의 개수를 체크하는 변수를 생성한다.
2. 괄호 문자열(s)에서 괄호 하나하나 확인한다.
   2-1. 열린 괄호를 찾으면 변수의 값을 1 증가시킨다.
   2-2. 닫힌 괄호를 찾으면, 현재 변수의 값이 양수인지 확인한다.
      2-2-1. 값이 양수라면 열린 괄호가 앞에 있으므로 정상적임을 판단하여 변수의 값을 1 감소시킨다.
      2-2-2. 값이 양수가 아니라면 열린 괄호가 앞에 없는 비정상적임을 판단하여 false를 반환한다.
3. 모든 괄호 문자열(s)를 확인한 결과 변수가 0보다 크면 열린 괄호가 더 많다는 의미이므로 false를 반환한다.
4. 변수가 0이라면 true를 반환한다.

 

 

 

 

∋ 코드 구현

function solution(s){
    let answer = true;
    // 1. 괄호의 개수를 체크하는 변수를 생성한다.
    let bracketList = 0;

    // 2. 괄호 문자열(s)에서 괄호 하나하나 확인한다.
    for(let i = 0; i < s.length; i++) {
        //  2-1. 열린 괄호를 찾으면 변수의 값을 1 증가시킨다.
        if(s[i] === '(') {
            bracketList++;
        // 2-2. 닫힌 괄호를 찾으면, 현재 변수의 값이 양수인지 확인한다.
        } else {
            // 2-2-1. 값이 양수라면 열린 괄호가 앞에 있으므로 
            //        정상적임을 판단하여 변수의 값을 1 감소시킨다.
            if (bracketList > 0) {
                bracketList--;
            // 2-2-2. 값이 양수가 아니라면 열린 괄호가 앞에 없는 
            //        비정상적임을 판단하여 false를 반환한다.
            } else {
                answer = false;
                break;
            }
        }
    }

    // 3. 모든 괄호 문자열(s)를 확인한 결과 변수가 0보다 크면 
    //    열린 괄호가 더 많다는 의미이므로 false를 반환한다.
    if(bracketList > 0) {
        answer = false;
    }

    // 4. 변수가 0이라면 true를 반환한다.
    return answer;
}

 

 

 

∋ 채점 결과

프로그래머스-올바른-괄호-채점결과

 

 

올바른 괄호 문제 풀이 채점 결과는 정확성 테스트 케이스 18개, 효율성 테스트 케이스 2개 모두 통과하여 100점으로 풀이 완료하였습니다.

728x90

댓글