개발 공부/코딩 테스트

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

바 질 2024. 2. 6. 18:18

문제

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

시도했던 방법 & 결과

function solution(s){
    while (s.includes('()')) {
        s = s.replaceAll('()','')
    }
    if (s === '') return true
    else return false
}

while 문을 사용하여 문자열에 ‘()’가 포함되어 있으면 제거하는 과정을 반복한다. 문자열에 더이상 ‘()’이 남아있지 않을 때 문자열이 ‘’이면 true, 그렇지 않으면 false를 반환한다. 정확성 테스트는 전부 통과했지만 효율성 테스트는 전부 실패했다.

문제점

‘()’의 제거가 다 끝날 때까지 while 문을 계속 돌려야 하기 때문에 런타임이 오래 걸린다.

풀이

function solution(s) {
    let cnt = 0;
    for (let i = 0; i < s.length; i++) {
        s[i] === "(" ? cnt++ : cnt--;
        if (cnt < 0) return false; // 여기서 break을 사용하면 실패가 뜬다.
        // 함수를 바로 종료하는 것과 반복문을 빠져나가고 종료하는 것에서 성능 차이가 발생하는 것 같다.
    }
    return cnt === 0;
}

for 문을 사용해서 ‘(’와 ‘)’의 개수를 계산한다. ‘)’의 개수가 ‘(’의 개수보다 많아지면 올바르지 않은 괄호 문자열이라는 뜻이므로 반복문을 탈출한다. cnt가 0이면 true를 반환하고, 그렇지 않으면 false를 반환한다.

알게 된 점

return cnt === 0; 은 return (cnt === 0) ? true : false; 를 간결하게 작성한 코드이다.