https://school.programmers.co.kr/learn/courses/30/lessons/12913
1. Swift 풀이
func solution(_ land:[[Int]]) -> Int{
var dp = land[0]
for i in 1..<land.count {
let candidate = dp.sorted(by: { $0 > $1 })
let candidateIndex = dp.firstIndex(of: candidate.first!)!
for j in 0..<4 {
let preMax = candidateIndex == j ? candidate[1] : candidate[0]
dp[j] = land[i][j] + preMax
}
}
return dp.max()!
}
2. Python 풀이
def solution(land):
dp = land[0]
for i in range(1, len(land)):
candidate = sorted(dp, reverse=True)
candidateIndex = dp.index(candidate[0])
for j in range(4):
preMax = candidate[1] if candidateIndex == j else candidate[0]
dp[j] = preMax + land[i][j]
return max(dp)
원래 아래 코드를 가장 우선으로 구현했다. 하지만 효율성 테스트에서 시간 초과가 발생했다.
최악인 경우의 시간 복잡도를 계산해봤는데, 10M * (4 + 4log4)로 1억이 나올 수가 없다고 판단했다.
enumerated를 사용하지 않고, 동일 로직에 대해 다른 방식으로 구현을 했는데 시간초과가 문제가 발생하지 않았다.
만약 시간 복잡도가 1억이 넘을 수가 없는데, 시간초과가 발생한다면 같은 로직이더라도 다른 풀이로 구현해보자.
(왜 시간초과가 나는 걸까..... )
func solution(_ land:[[Int]]) -> Int{
var dp = land[0]
for i in 1..<land.count {
let candidate = dp.enumerated().sorted(by: { $0.1 > $1.1 })
for j in 0..<4 {
let preMax = candidate[0].0 == j ? candidate[1].1 : candidate[0].1
dp[j] = land[i][j] + preMax
}
}
return dp.max()!
}
[프로그래머스] 롤케이크 자르기 (0) | 2024.01.09 |
---|---|
[프로그래머스] 스킬트리 (1) | 2024.01.08 |
[프로그래머스] 뒤에 있는 큰 수 찾기 (0) | 2024.01.03 |
[프로그래머스] 단어 변환 (0) | 2024.01.02 |
[프로그래머스] 주차 요금 계산 (0) | 2023.12.29 |