[Swift / Python] 프로그래머스(Lv2) - 기능개발

Kerri·2021년 5월 18일
0

코테

목록 보기
46/67

안녕하세요 ! 예전에 파이썬으로 풀었던 문제를 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
}
profile
안녕하세요 !

0개의 댓글