반응형
문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항
prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
prices의 길이는 2 이상 100,000 이하입니다.
풀이
인덱스 차이를 이용하여 초를 계산하기 위해 스택에 인덱스를 넣는 방식으로 구현했다.
주어진 배열을 순회하며
- 스택에 인덱스를 push한다.
- 만약 현재 주식가격이 스택의 top과 대응하는 주식가격보다 작다면 가격이 떨어진 것
- 스택에서 pop한 인덱스와 현재 인덱스의 차이(= 초)를 answer 배열에 저장한다.
- 배열을 순회 한 후 stack에 남아있는 값들은 끝까지 가격이 떨어지지 않은 것
- 배열의 마지막 인덱스와 스택에서 pop한 인덱스의 차이를 answer배열에 저장한다.
fun main() {
val sol = Solution()
sol.solution(intArrayOf(1, 2, 3, 2, 3))
}
class Solution {
fun solution(prices: IntArray): IntArray {
val answer = IntArray(prices.size)
val stack = ArrayDeque<Int>()
for (i in prices.indices) {
while (stack.isNotEmpty() && prices[i] < prices[stack.last()]) {
val topIndex = stack.removeLast()
answer[topIndex] = i - topIndex
}
stack.addLast(i)
}
val lastIndex = prices.size-1
while (stack.isNotEmpty()) {
val topIndex = stack.removeLast()
answer[topIndex] = lastIndex - topIndex
}
return answer
}
}
반응형
'학습 기록 > 문제풀이' 카테고리의 다른 글
| [백준 2480] 주사위 세개 | Java (1) | 2025.03.25 |
|---|---|
| [프로그래머스] N으로 표현 | kotlin (2) | 2025.03.19 |
| [소프티어] 장애물 인식 프로그램 | kotlin (0) | 2025.02.04 |
| [소프티어] 함께하는 효도 | kotlin (0) | 2025.02.04 |
| [소프티어] 나무섭지 | kotlin (0) | 2025.02.02 |