안녕하세요 ! 예전에 파이썬으로 풀었던 문제를 Swift로 새롭게 풀어보았습니다.
https://programmers.co.kr/learn/courses/30/lessons/42586
먼저 예전에 풀었던 파이썬 코드 입니다.
딕셔너리를 이용해서 풀었네요.
import math
def solution(progresses, speeds):
answer = []
need_time = []
hash_time = dict()
len_progress = len(progresses)
for idx in range(len_progress):
remain = 100 - progresses[idx]
day = math.ceil(remain / speeds[idx])
need_time.append(day)
if idx == 0:
hash_time[day] = 1
continue
else:
temp = max(need_time[:idx])
if temp < day:
if day not in hash_time:
hash_time[day] = 1
else:
hash_time[temp] += 1
for key in sorted(hash_time.keys()):
answer.append(hash_time[key])
return answer
새롭게 풀어본 Swift 코드입니다. 배열을 한번만 돌아도 답을 구할수 있네요.
처음에 ceil 함수로 올림해서 풀었더니 11번 테케가 틀려서 좀 난잡하긴 하지만 나머지가 있으면 +1 해줘서 풀었는데 정답이네요..
import Foundation
func getWorkDay(_ progress:Int, _ speed:Int) -> Int {
let work: Int
if ((100 - progress) % speed) != 0 {
work = Int((100 - progress) / speed) + 1
} else {
work = Int((100 - progress) / speed)
}
return work
}
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
var answer = [Int]()
var workes = [Int]()
var current_max = getWorkDay(progresses[0], speeds[0])
var cnt = 0
for (idx, progress) in progresses.enumerated() {
let work = getWorkDay(progress, speeds[idx])
workes.append(work)
if work > current_max {
answer.append(cnt)
cnt = 1
current_max = work
} else {
cnt += 1
}
}
answer.append(cnt)
return answer
}