개발 공부/코딩 테스트
[프로그래머스] 올바른 괄호 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; 를 간결하게 작성한 코드이다.