- 회전시에 기준이 되는 점 변수 정하기 -> 이는 한번 할때마다 1씩 빼짐.
- 그 기준으로 뒤에 부분을 먼저 식에 대입, 앞에꺼를 그 다음에 대입
-> 만약 값이 ( , { , [ 라면 stack에 push
-> 값이 ) , } , ], 라면 stack에 있는걸 pop하여 각자 대상이랑 비교, 만약 짝이 안맞는다면 answer X- 이렇게 끝까지 갔을때, stack에 남는게 없고 중간에 짝 안맞는게 걸리지 않았다면 answer++
function solution(s) {
var answer = 0;
var len = s.length;
while(true){
var stack = [];
var popChar;
var check = true;
for(var i = len; i<s.length;i++){
if(s[i]==="\("||s[i]==="\{"||s[i]==="\["){
stack.push(s[i]);
}
else{
popChar = stack.pop();
if(s[i]===")"){
if(popChar!=="("){
check= false;
break;
}
}
else if(s[i]==="}"){
if(popChar!=="{"){
check= false;
break;
}
}
else if(s[i]==="]"){
if(popChar!=="["){
check= false;
break;
}
}
}
}
for(var k = 0;k<len;k++){
if(s[k]==="("||s[k]==="{"||s[k]==="["){
stack.push(s[k]);
}
else{
popChar = stack.pop();
if(s[k]===")"){
if(popChar!=="("){
check= false;
break;
}
}
else if(s[k]==="}"){
if(popChar!=="{"){
check= false;
break;
}
}
else if(s[k]==="]"){
if(popChar!=="["){
check= false;
break;
}
}
}
}
if(check === true && stack.length===0) answer++;
len--;
if(len===0) return answer;
}
}
솔직히 이번 문제 위에 코드는 틀리거나 시간초과가 날 것이라고 예상했다. 왜냐하면 너무 문제에서 하란대로 풀었기 때문이다. 이 말이 무슨 말이냐면, 문제를 풀때 문제에서 하란대로 하기보단 그 문제를 관통하는 핵심적이고, 쉬운 풀이가 있기 마련이다. 하지만 이번 문제에서는 그걸 하기보다는 문제에서 하라는 순서대로 따라갔다. 그래서 코드가 엄청 길어졌고, 스스로 비효율적이라고 생각했다.
하지만 이 방법에 좋은 점은틀린 논리는 아니라는 것
이다. 문제에서 하란대로 했기 때문에 틀리지는 않았다. 혹시나 하는 마음에 다른 분들 코드도 참고했는데, 다른 분들도 이런식으로 진행하였고 이를 관통하는 핵심 풀이는 없는 것으로 보였다.