Leetcode) Best Time to Buy and Sell Stock II

Duna·2021년 7월 23일
0
post-thumbnail

Top Interview Questions
Easy Collection

Link of Problem

LEVEL : 🌕 🌑 🌑 🌑 🌑 (최하)


Easy Collection의 두번째 문제인 Best Time to Buy and Sell Stock II를 풀어봤습니다.

저번에 첫 문제를 한 번 풀어봐서 그런지, 비슷한 방식으로 풀어가면 되는거라서 크게 어려움은 없었습니다.

또한 첫 시도에서 좋은 Runtime를 얻고 best example과도 크게 차이가 없어서 저번보다 시도 횟수가 많이 줄었습니다.

일단 제가 썼던 코드를 한 번 보여드리겠습니다.

1️⃣ 번째 방법

이번 문제는 전에 산 물건이 후에 팔았을 때 가장 큰 이득을 얻었다고 할 때, 얼마의 이득을 얻는가에 대한 문제였습니다.

즉, 후에 이득이 나지 않는다면 팔지 않아도 된다는 겁니다.

그래서 저는 현재(index)가 전(index-1)보다 더 큰 수를 가지고 있는 경우에 profit에다가 값을 더 해줬습니다.

func maxProfit(_ prices: [Int]) -> Int {
    var profit = 0
    
    for index in 1..<prices.count {
        if prices[index-1] < prices[index] {
            profit += prices[index] - prices[index-1]
        }
    }
    
    return profit
}

이렇게 코드를 짰더니, 결과는 Success
하지만, Runtime도 좋았습니다.

2️⃣ 번째 방법(best example)

한 번에 완료하고나서 앞에 더 좋은 example들을 살펴보았습니다.

제가 사용한 방법과 비슷한 맥락으로 코드가 대부분 짜여져있었는데요.
조금 특이한 방식을 봤습니다.

"where"

저는 SQL이후로 where를 오랜만에 보는 것 같습니다.
swift에도 where이 있더라구요..

func maxProfit(_ prices: [Int]) -> Int {
    var profit = 0
    
    for index in 1..<prices.count where prices[index-1] < prices[index] {
        profit += prices[index] - prices[index-1]
    }
    
    return profit
}

if문 대신에 where를 써서 for문 조건에다가 where조건을 달아줬더라구요.
정말 신기했습니다.

이렇게 쓸 수 있을뿐만 아니라 값 바인딩, 타입 캐스팅, 익스텐션에서도 사용할 수 있었습니다.
나중에 한 번 써보려구요.
# where reference

profile
더 멋진 iOS 개발자를 향해

0개의 댓글