https://programmers.co.kr/learn/courses/30/lessons/12973
function solution(s)
{
var answer = 0;
let stack = []
let arr = s.split('')
arr.forEach((v,i)=>{
let top = stack[stack.length-1]
if(top == v){
stack.pop()
}
else{
stack.push(v)
}
})
return stack.length == 0 ? 1 : 0;
}
처음에는 이런식으로 스택을 사용하여 현재 문자와 스택에서 가장 마지막에 추가된 문자(top)와 같으면 스택에 안넣고 마지막에 있던 문자도 pop 한것을 끝까지 반복한뒤에 스택길이를 체크하는 방식으로 풀었는데, 딱 하나의 케이스에서 시간초과가 났다.
반복문을 하나밖에 사용하지 않았고 간단한 스택연산이기에 시간복잡도는 O(N)으로 생각했기다. 따라서 눈에들어온것은 forEach를 사용하기 위해 문자열을 배열로 바꾸는 split연산이었다. 이 연산이 O(N)정도 걸리는것을 파악해서 이것을 일반 반복문으로 바꿔서 풀었다.
function solution(s)
{
var answer = 0;
let stack = []
for(let i = 0; i < s.length; i++){
let v = s[i]
let top = stack[stack.length-1]
if(top == v){
stack.pop()
}
else{
stack.push(v)
}
}
return stack.length == 0 ? 1 : 0;
}
결과는 이렇게 푸니까 시간초과나는 테케를 통과할 수 있었다.
사실 결과창에서 확인해보니 시간차이가 별로 나진 않았으나, 실제 코딩테스트에서는 시간복잡도를 좀 더 디테일하게 체크해 볼 필요가 있음을 느꼈다.