문제 설명

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

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

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

제한사항

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

입출력 예

sanswer

"()()" true
"(())()" true
")()(" false
"(()(" false

입출력 예 설명

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


작성한 코드 - JavaScript

function solution(s){
    var sArr = s.split("");
    var parentheses = 0;
    var sArrLength = sArr.length;

    if (sArr[0] === ")")
        return false;
    
    for (var i=0 ; i<sArrLength ; i++) {
        if(sArr[i]==='\(')
            parentheses++;
        else
            parentheses--;
        
        if(parentheses < 0)
            return false
    }
    
    if (parentheses === 0) 
        return true
    else 
        return false;
}

 

점수 : 1057(+11)

채점 결과
정확성: 69.5
효율성: 30.5

합계: 100.0 / 100.0

 

해결 방법

  1. 여는 괄호의 갯수와 닫는 괄호의 갯수가 동일하다는 것을 활용하여 해결한다.
  2. 첫 글자가 닫는 괄호면 잘못된 괄호 형식이므로 바로 false를 return 한다.
  3. 주어진 문자열을 배열로 쪼개고 여는 괄호가 나오면 count 값을 +1 해주고 닫는 괄호가 나오면 count를 -1해준다.
  4. for문 내에서 비교 시 닫는 괄호가 더 많아져 count가 음수가 되면 잘못된 괄호 형식이므로 바로 false를 return 한다.

배운 점 

  • 처음엔 for문을 끝까지 돌려 최종 count 값을 검사했는데 효율성이 낮아 테스트 결과에 실패했다. 그래서 중간 검사를 통해 for문을 멈추거나 for문을 안태워서 효율성을 높였다.

좋아요 가장 많이 받은 풀이

function is_pair(s){
  var result = s.match(/(\(|\))/g);
  return result[0] == '(' && result.length % 2 == 0 ? true : false
}

 

  • .match()는 정규표현식에 맞는 문자열을 찾아서 배열 객체로 반환한다. 없으면 null을 반환한다.

'✏️ 공부 > 코딩테스트' 카테고리의 다른 글

프로그래머스(lv2) - 스킬트리  (0) 2021.03.20
프로그래머스(lv2) - 문자열 압축  (0) 2021.03.19
완주하지 못한 선수  (0) 2021.03.16
서울에서 김서방 찾기  (0) 2021.03.15
두 정수 사이의 합  (0) 2021.03.11

+ Recent posts