전형적인 stack, queue문제 하지만 늘 똑같이 풀다가 이상한 점을 한 가지 발견했다.
로직상으로도, 직접 한 개씩 넣어보아도 멀쩡한 코드인데 자꾸 효율성에서 시간 초과가 나왔는데 범인은 === 엄격한 비교 였다.
내 생각엔 문자열을 엄격한 비교시 더 많은 시간이 걸려서 그런가 (?) 라고 생각은 하는 중이다.
function solution(s){
s = s.split('')
let stack = [];
if (s[0] == ")" || s[s.length-1] == "(" ) {
return false
}
if (s[0] == "(") {
stack.push(s[0])
for (i=1; i<s.length; i++) {
if (s[i] == "(") {
stack.push(s[i])
} else if (s[i] == ")") {
stack.pop()
}
}
}
return !stack.length ? true : false
}
매우 깔끔하고 특이한 코드를 보았다. 비록 stack을 활용한 것이 아니더라도 발상 자체가 깔끔하다.
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;
}
s의 각 값들이 ( 라면 1을 더해주고 아니라면 1을 빼주는데
총 결과가 맞아 떨어지지 않거나 cum의 값이 0이 된다면 false를 리턴하고 깔끔하게 0이 된다면 true를 반환한다.