문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 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
해결 방법
- 여는 괄호의 갯수와 닫는 괄호의 갯수가 동일하다는 것을 활용하여 해결한다.
- 첫 글자가 닫는 괄호면 잘못된 괄호 형식이므로 바로 false를 return 한다.
- 주어진 문자열을 배열로 쪼개고 여는 괄호가 나오면 count 값을 +1 해주고 닫는 괄호가 나오면 count를 -1해준다.
- 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 |