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

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

CodingTest

목록 보기
23/34

01. 이해

일정 기간 동안의 주가를 배열로 받았을 때 주식을 사고 팔아 얻을 수 있는 가장 큰 이익을 반환. 여러번 사고 팔 수 있음.
   

02. 계획

다음날 가격이 오른다면 주식을 사고 내리기 전에 판다.

03. 실행

fun maxProfit(prices: IntArray): Int {
    var profit = 0
    var myStock = -1

    prices.forEachIndexed { index, i ->

        if (index < prices.size - 1 && i < prices[index + 1] && myStock == -1) {
        myStock = i
        } else if (myStock != -1) {
            if (index == prices.size - 1 || prices[index] > prices[index + 1]) {
                profit += prices[index] - myStock
                myStock = -1
            }

        }
    }

    return profit
}

04. 회고

best time to buy and sell stock의 두번째 문제. 첫번째 문제에서는 사고 파는게 각각 한번씩 밖에 불가능 했지만 이번엔 여러번 사고 파는 것이 가능했다. 단 사고 나면 다시 팔아야 살 수 있다.
현재 인덱스 기준으로 주식이 없는데 다음날 주식이 오른다면 주식을 사고 내일다면 사지 않고 주식이 있는데 다음날 오른다면 그대로 가지고 있고 내린다면 오늘 파는 방식으로 배열을 한바퀴만 돌도록 했다. 답안을 제출했더니 테스트 케이스 하나에서 걸렸는데 주식이 없는 상태를 0으로 잡았는데 주식이 0인 경우가 있어서 예외처리가 제대로 되지 않은 것이었다. 주식이 0인 경우가 어디 있어요.... 문제처럼 다음날 주식이 오를지 내릴지 알 수 있다면 얼마나 좋을까...

0개의 댓글