Top Interview Questions
Easy Collection
LEVEL : 🌕 🌑 🌑 🌑 🌑 (최하)
Easy Collection의 두번째 문제인 Best Time to Buy and Sell Stock II를 풀어봤습니다.
저번에 첫 문제를 한 번 풀어봐서 그런지, 비슷한 방식으로 풀어가면 되는거라서 크게 어려움은 없었습니다.
또한 첫 시도에서 좋은 Runtime를 얻고 best example과도 크게 차이가 없어서 저번보다 시도 횟수가 많이 줄었습니다.
일단 제가 썼던 코드를 한 번 보여드리겠습니다.
이번 문제는 전에 산 물건이 후에 팔았을 때 가장 큰 이득을 얻었다고 할 때, 얼마의 이득을 얻는가에 대한 문제였습니다.
즉, 후에 이득이 나지 않는다면 팔지 않아도 된다는 겁니다.
그래서 저는 현재(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도 좋았습니다.
한 번에 완료하고나서 앞에 더 좋은 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