난이도 : Lv 2
분류 : 스택 / 큐
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import Foundation
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
var tmpProgresses: [Int] = progresses
var tmpSpeeds: [Int] = speeds
var tmpCnt: Int = 0
var result: [Int] = []
while true {
// while 문을 사용해 매일매일 진행한다.
if tmpProgresses.isEmpty {
if tmpCnt > 0 {
result.append(tmpCnt) // 완성할 작업이 없는 경우 마지막에 기록된 개수를 기록
}
break // 루프를 빠져나간다.
}
if tmpProgresses[0] < 100 {
// 제일 처음 작업이 완료되지 않았다면 다음을 실행한다.
if tmpCnt > 0 {
result.append(tmpCnt) // 하루에 완료된 작업의 개수를 기록
}
tmpCnt = 0 // 첫 작업이 완료되지 않았기 때문에 완료 개수를 0으로 변경
for (workIdx, load) in zip(0..<tmpSpeeds.count, tmpSpeeds) {
// for 문을 사용해 목록에 있는 하루치 작업들을 진행한다.
tmpProgresses[workIdx] += load // 작업에 맞는 작업 속도를 더한다.
}
} else {
// 제일 처음 작업이 완료되었다면 다음을 실행한다.
tmpProgresses.removeFirst() // 완료된 작업 제외
tmpSpeeds.removeFirst() // 작업 속도도 마찬가지로 제외
tmpCnt += 1 // 하루에 완료된 작업의 개수를 증가
}
}
return result // 결과를 return 한다.
}
풀이
1. Progresses 와 Speeds 는 길이가 같다. == 작업별 개발 속도가 정해져 있다.
2. 제일 첫 작업이 완료되지 않으면 뒤의 작업이 100%가 되어도 배포할 수 없다. == Progresses[0] >= 100 이 되어야 배포 시작 가능함.
P.S
2단계 문제답지 않게 쉬운 문제였으며, 여러 방법으로 풀이가 가능하다.
고차함수를 활용해서 코드 라인을 더 줄여봐야겠다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 베스트앨범 (0) | 2023.02.21 |
---|---|
[프로그래머스] 위장 (0) | 2023.02.21 |
[프로그래머스] 다리를 지나는 트럭 (0) | 2023.02.17 |
[프로그래머스] 프린터 (0) | 2023.02.17 |
[프로그래머스] 올바른 괄호 (0) | 2023.02.17 |