• TOC {:toc}

이 글은 프로그래머스의 12909번 문제를 자바스크립트(JavaScript)로 풀이한 것을 모아놓은 글입니다.

일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.

2024.03.09

정확성 테스트

테스트 통과 시간 메모리
테스트 1 통과 0.04ms 33.5MB
테스트 2 통과 0.06ms 33.6MB
테스트 3 통과 0.04ms 33.6MB
테스트 4 통과 0.04ms 33.5MB
테스트 5 통과 0.05ms 33.5MB
테스트 6 통과 0.04ms 33.5MB
테스트 7 통과 0.05ms 33.5MB
테스트 8 통과 0.05ms 33.5MB
테스트 9 통과 0.12ms 33.6MB
테스트 10 통과 0.05ms 33.6MB
테스트 11 통과 0.05ms 33.6MB
테스트 12 통과 0.14ms 33.5MB
테스트 13 통과 0.13ms 33.5MB
테스트 14 통과 0.15ms 33.6MB
테스트 15 통과 0.13ms 33.6MB
테스트 16 통과 0.14ms 33.4MB
테스트 17 통과 0.14ms 33.6MB
테스트 18 통과 0.17ms 33.5MB

효율성 테스트

테스트 통과 시간 메모리
테스트 1 통과 5.03ms 37.6MB
테스트 2 통과 5.34ms 37.6MB
단계 시작 시각 끝난 시각 걸린 시간
문제 이해 18:33:43 18:34:37
풀이 생각 18:34:39 18:35:30
코딩 18:35:32 18:37:33
function solution(s) {
    const stack = [];

    for (let i = 0; i < s.length; i += 1) {
        if (s[i] === "(") stack.push(s[i]);
        else {
            if (!stack.length) return false;
            stack.pop();
        }
    }
    return stack.length === 0;
}

아이디어 & 풀이

문자열 s를 순회하면서

  • 현재 문자가 ( 이면 stack에 해당 값을 push 한다. push 하는 값은 무엇이든 상관없다.
  • 현재 문자가 ) 이면 stack에 쌍을 이룰 수 있는 여는 괄호가 있는지 확인한다.
    • 쌍을 이룰 수 있는 여는 괄호가 없으면 괄호를 완성할 수 없으므로 바로 false를 반환한다.
    • 괄호가 남아있으면 해당 여는 괄호와 쌍을 이루는 것이므로 해당 여는 괄호를 pop 한다.
  • 순회가 끝났을 때 stack안에 여는 괄호가 남아있지 않아야 올바른 괄호이므로 stacklength를 0과 비교한 값을 반환한다.

참고 답안

정확성 테스트

테스트 통과 시간 메모리
테스트 1 통과 0.07ms 33.6MB
테스트 2 통과 0.05ms 33.4MB
테스트 3 통과 0.06ms 33.6MB
테스트 4 통과 0.06ms 33.5MB
테스트 5 통과 0.05ms 33.5MB
테스트 6 통과 0.04ms 33.4MB
테스트 7 통과 0.05ms 33.5MB
테스트 8 통과 0.06ms 33.5MB
테스트 9 통과 0.04ms 33.4MB
테스트 10 통과 0.05ms 33.4MB
테스트 11 통과 0.05ms 33.5MB
테스트 12 통과 0.13ms 33.4MB
테스트 13 통과 0.15ms 33.4MB
테스트 14 통과 0.14ms 33.5MB
테스트 15 통과 0.15ms 33.4MB
테스트 16 통과 0.13ms 33.5MB
테스트 17 통과 0.14ms 33.5MB
테스트 18 통과 0.14ms 33.4MB

효율성 테스트

테스트 통과 시간 메모리
테스트 1 통과 5.48ms 38.3MB
테스트 2 통과 4.82ms 38.3MB
function solution(s) {
    let letterCount = 0;
    for (let paren of s) {
        letterCount += paren === "(" ? 1 : -1;
        if (letterCount < 0) {
            return false;
        }
    }
    return letterCount === 0;
}
  • stack에 직접 push, pop하는 대신에 남은 문자의 개수 letterCount를 이용해 풀었다.