Develop/Algorithm
[프로그래머스] 올바른 괄호 / Level2 / JavaScript
HongUniverse
2022. 8. 20. 14:19
반응형
✏️ 문제
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
1) 시도 : 92.3점
function solution(s){
//문자열 배열로 변경
let sArray = [...s];
//마지막이 (이면 무조건 false
if(")" == sArray[0] || "(" == sArray[sArray.length - 1]){
return false;
}else{
const result = sArray.filter(function(el, idx) {
return el !== '(';
});
const result2 = sArray.filter(function(el, idx) {
return el === '(';
});
if(result.length == result2.length){
return true;
}else{
return false;
}
}
}
2) 다른 사람의 풀이 참고
function solution(s){
let stackCount = 0;
for (let i = 0; i < s.length; i++) {
stackCount += s[i] === '(' ? 1 : -1;
if (stackCount < 0) return false;
}
return stackCount === 0 ? true : false;
}
출처 : https://jsikim1.tistory.com/251
3) 셀프 피드백
틀린 이유가, '('와 ')'의 수만 같게 생각하는게아니라, '('의 수보다 ')'가 더 많아지는, 즉 닫히는 괄호가 먼저 더 많으면 안되므로 그걸 고려해줬어야 했다.
그리고 출처에서 센스있게 '(' 일시 1로 설정해주어 무조건 '('부터 시작해야되게 로직을 짰다.
처음 해보는거라 첫 시도에는 코드가 굉장히 길어졌는데, 이렇게 배우면서 하면 많이 늘 것 같다. 또 첫 아이디어에 코드부터 짜지말고 다양한 경우의수를 생각해보고 오히려 급하지 않게 해야한다고 반성했다.
반응형