// 괄호는 먼저 열려야 하고, 열린만큼 닫혀야 함
// 입력된 문자열을 반복문으로 분리하자
// 열림이 나오면 다른 문자열에 저장해두었다가
// 닫힘이 나올때 하나씩 꺼내어 열+닫 짝을 맞추어 줄여나가고
// 중간에 열림이 모자르면 바로 false를 리턴하고
// 문자열이 끝날때까지 잘 맞춰지면 true를 리턴하자
// 정확도와 효율성을 따로 검사함
// 최초의 시도는 정확도는 100점인데 효율성이 0점이라 탈락
// 문제점이 무엇인지 고민하다가 if에서의 효율을 올리려고 코드를 고민함
// else처리했던 부분을 바로 처리되도록 수정하였더니 효율도 100점
function solution(s){
// 열림을 카운팅할 카운터
let cnt = 0;
// 반복문으로 입력된 문자열 s를 처리
for (let i = 0; i < s.length; i++) {
// 현재 문자열이 열림인지 닫힘인지를 구별
// 열림일때는 카운터++
if (s[i] === '(') {cnt++;}
// 닫힘일때는 카운터를 체크
if (s[i] === ')') {
// 0이면 잘못 닫힌 괄호이므로 바로 false 리턴
if (cnt === 0) {
return false;
}
cnt--;
}
}
// 반복문이 끝나고 카운터가 0이면 true, 아니라면 false
if (cnt === 0) {
return true;
}
return false;
}
function solution(s){
let cum = 0
for (let paren of s) {
cum += paren === '('? 1: -1
if(cum < 0) {
return false
}
}
return cum === 0? true: false;
}
// 결론적으로 봤을때는 내 코드와 거의 유사한 구조
// 삼항식을 사용하여 코드가 좀 더 간결해지고 가독성이 좋아졌음
function solution(s){
let cum = 0
for (let paren of s) {
cum += paren === '('? 1: -1
if(cum < 0) {
return false
}
}
return cum === 0? true: false;
}