첫 풀이
해당 문제는 스택의 원리를 이해하고 있는지 물어보는 문제이며, 주어진 prices
배열에서 각 요소(가격)들이 얼마나 유지되었는지를 구해야 한다.
문제를 보면 확인할 수 있듯이, 가격은 이하
가 아니라, 미만
을 기준으로 답을 return
해야 한다.
풀이로는 answer
라는 빈 배열에 cnt
라는 변수를 통해서 얼마만큼 가격이 유지되었는지 반복문을 순회할때마다 1씩 증가하여 최종적으로 answer
에 마지막 인덱스로 push 시켜준다.
const solution = (prices) => {
let answer = []
for(let i = 0; i < prices.length; i++){
let cnt = 0 // 카운트 초기화
for(let y = i+1; y < prices.length; y++) {
cnt++
if (prices[i] > prices[y]) { // 가격이 떨어졌는지
answer.push(cnt)
// console.log("가격떨어진 경우 : ", cnt)
break
}
if (prices.length - 1 === y) { // 인덱스 끝에 도달했는지
answer.push(cnt)
// console.log("인덱스 끝인 경우 : ",cnt)
}
}
}
answer.push(0)
return answer
}
그리고 맨 마지막으로 answer
배열에 0을 push 하는 모습을 볼 수 있는데,
이는 prices
배열의 길이가 얼마든지 간에 마지막 가격의 유지 시간은 무조건 0
이기 때문에 prices[prices.length-1]
까지는 직접 이중 반복문을 통해 값을 구하고,
마지막은 강제로 0
을 push 하는 방식으로 문제를 해결했다.
문제 해결 후 풀이를 개선하고자 다른사람들의 풀이도 참고했는데,
대부분의 사람들이 While 반복문, 또는 위와같은 2중 반복문으로 스택
의 개념을 활용해서 문제를 해결하는 형태였다.
기본 원리 자체는 크게 벗어나지 않는 것 같아 따로 추가하지는 않았다..!