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

김동선·2022년 10월 22일
0
post-custom-banner

문제풀이

function solution(s){
    var answer = true;
    s = s.split('')
    let check = 0
    while (s[0]) {
        if (s[0] === '(') {
            check++
            s.shift()
        } else {
            if (check === 0) {
                answer = false
                break
            }
            for (let i = 0; i < check; i++) {
                if (!!s[0] && s[0] === ')') s.shift()
                else answer = false
            }
            check = 0
        }
    }

    return answer;
}

처음엔 다소 복잡하게 풀었다. 테스트 문제는 다 맞췄지만 제출하면 꽤 많이 틀렸다.
어떤 경우가 실패할까 고민하다 "(()())" 이 경우에 true가 return되야 하지만 false가 return 되었다.

function solution(s){
    s = s.split('')
    let check = 0
    while (s[0]) {
        if (s[0] === '(') check++
        else {
            if (check > 0) check--
            else return false
        }
        s.shift()
    }
    const answer = check === 0 ? true : false
    return answer;
}

코드를 수정하여 while문을 돌면서 check가 0 보다 작으면 바로 false를 return 하였다.
그리고 check가 0 이면 짝이 맞는 것으로 true를, 0이 아니라면 짝이 맞지 않는 것으로 false를 return하였다.
결과적으로 적확성은 전부 통과했지만, 효율성 2문제는 모두 시간초과가 났다.

function solution(s){
    let check = 0
    for (let i = 0; i < s.length; i++) {
        if (s[i] === '(') check++
        else {
            if (check > 0) check--
            else return false
        }
    }
    const answer = check === 0 ? true : false
    return answer;
}

s 문자열을 배열로 만들지 않고 바로 for문을 활용하는 식으로 코드를 수정하였다.
s를 굳이 배열로 만들어서 shift함수를 사용해야하는 것이 시간초과의 원인이였다.

느낀점

배열을 다루기보다 문자열을 다루는 것이 확실히 더 빠르다.
될 수 있으면 문자열을 배열로 만드는 것은 지양해야겠다.

profile
Nuxt, Nest 개발자
post-custom-banner

0개의 댓글