Programmers_12909 올바른 괄호
- 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
안에 여는 괄호가 남아있지 않아야 올바른 괄호이므로stack
의length
를 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
를 이용해 풀었다.
-
ps-js