코딩 테스트 연습 - best time to buy and sell stock

다용도리모콘·2020년 9월 20일
0

CodingTest

목록 보기
22/34

01. 이해

일자별 주식 가격 배열을 받아 가장 이득이 되게 사고 판 수익을 반환하라.
사기 전에 팔 수 없음.
   

02. 계획

배열 순서대로 가면서 선택된 인덱스의 날짜에 사서 인덱스 이후의 원소 중 가장 이득이
되었을 때의 수익을 저장하고 다음 인덱스로 이동. 이전의 최고 수익과 비교해서 높은 수익을
저장. 마지막에 반환.

03. 실행

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
}

04. 회고

특정 시점에 주식을 산 다음에 어떤 시점에 파는게 가장 이득이 클지 계산하려면 2중 배열로 모든 케이스를 해볼 수 밖에 없다고 생각했는데 과제를 제출하고 나서 보니 메모리 사용량은 괜찮은데 속도가 평균보다 7% 밖에 빠르지 않아서 개선할 방법을 생각해 본 결과 다음 날의 주식이 오늘보다 싸다면 오늘 주식을 샀을 때 언제 파는게 가장 이득일지를 계산할 필요가 없다는 것을 깨달았다. 이런 조건을 넣으니 속도가 평균 대비 63.43%로 상승했다. 예외 처리의 중요성을 알게 되는 부분.

0개의 댓글