새소식

인기 검색어

프로그래머스/Lv.2

[Swift] 과제 진행하기

  • -

https://school.programmers.co.kr/learn/courses/30/lessons/176962

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

// 1. 다음과제.시작시간 - 현재과제.시작시간 = 과제실행가능시간 // 2. 현재과제.실행시간 - 과제실행가능시간 = 남은실행시간 // 2-1 남은실행시간 == 1 // 1. 로 돌아가 반복 // 2-2 남은실행시간 > 0 // pasueTask.append(현재과제) 현재과제.실행시간 = 남은실행시간 // 2-3 남은실행시간 < 0 // 멈춘과제 = pasueTask.removeLast() // 멈춘과제.실행시간 - 남은실행시간 // 2로 반복 import Foundation struct Plan { let subject: String let startTime: Int var runningTime: Int init(subject: String, startTime: String, runningTime: String) { self.subject = subject let separatedTime = startTime.components(separatedBy: ":") self.startTime = Int(separatedTime.first!)! * 60 + Int(separatedTime.last!)! self.runningTime = Int(runningTime)! } } func solution(_ plans:[[String]]) -> [String] { var planList: [Plan] = plans .map { Plan(subject: $0[0], startTime: $0[1], runningTime: $0[2]) } .sorted { $0.startTime < $1.startTime } var pauseTask: [Plan] = [] var result: [String] = [] while true { var plan = planList.removeFirst() if planList.isEmpty { result.append(plan.subject) break } let runableTime = planList.first!.startTime - plan.startTime // 시간이 남으면 음수 var remainingTime = plan.runningTime - runableTime if remainingTime == 0 { result.append(plan.subject) continue } else if 0 < remainingTime { plan.runningTime = remainingTime pauseTask.append(plan) continue } else { result.append(plan.subject) while !pauseTask.isEmpty { var resumePlan = pauseTask.removeLast() remainingTime = resumePlan.runningTime + remainingTime if remainingTime <= 0 { result.append(resumePlan.subject) continue } else if 0 < remainingTime { resumePlan.runningTime = remainingTime pauseTask.append(resumePlan) break } } } } pauseTask.reversed().forEach { result.append($0.subject) } return result }
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.