일자별 주식 가격 배열을 받아 가장 이득이 되게 사고 판 수익을 반환하라.
사기 전에 팔 수 없음.
배열 순서대로 가면서 선택된 인덱스의 날짜에 사서 인덱스 이후의 원소 중 가장 이득이
되었을 때의 수익을 저장하고 다음 인덱스로 이동. 이전의 최고 수익과 비교해서 높은 수익을
저장. 마지막에 반환.
fun maxProfit(prices: IntArray): Int {
var maxProfit = 0
prices.forEachIndexed { index, i ->
if (index < prices.size -1 && i < prices[index + 1]) {
for (innerIndex in index + 1 until prices.size) {
if (prices[innerIndex] - i > maxProfit) {
maxProfit = prices[innerIndex] - i
}
}
}
}
return maxProfit
}
특정 시점에 주식을 산 다음에 어떤 시점에 파는게 가장 이득이 클지 계산하려면 2중 배열로 모든 케이스를 해볼 수 밖에 없다고 생각했는데 과제를 제출하고 나서 보니 메모리 사용량은 괜찮은데 속도가 평균보다 7% 밖에 빠르지 않아서 개선할 방법을 생각해 본 결과 다음 날의 주식이 오늘보다 싸다면 오늘 주식을 샀을 때 언제 파는게 가장 이득일지를 계산할 필요가 없다는 것을 깨달았다. 이런 조건을 넣으니 속도가 평균 대비 63.43%로 상승했다. 예외 처리의 중요성을 알게 되는 부분.