프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.
progresses | speeds | return |
---|---|---|
[93, 30, 55] | [1, 30, 5] | [2, 1] |
[95, 90, 99, 99, 80, 99] | [1, 1, 1, 1, 1, 1] | [1, 3, 2] |
(100 - progresses[i]) / speeds[i]
으로 계산합니다. (소수점 아래 자리 값이 있을 경우 1을 더한 값으로 계산)checker
라는 변수를 두고, days
배열의 원소값을 차례로 비교했습니다.days[i]
값과 days[i + 1]
값을 비교해서, 앞에 위치한 값이 작을 때, checker
변수의 값을 result
배열에 추가하는 식으로, 릴리즈되는 작업의 갯수를 계산할 수 있습니다.import Foundation
func solution(_ progresses:[Int], _ speeds:[Int]) -> [Int] {
var days: [Int] = []
var result: [Int] = []
var temp = 0
var checker = 1
do {
for i in 0..<progresses.count {
days.append((100 - progresses[i]) / speeds[i])
if (100 - progresses[i]) % speeds[i] != 0 {
days[i] += 1
}
}
}
temp = days[0]
for i in 0..<days.count {
if i == days.count - 1 {
result.append(checker)
} else {
if temp < days[i + 1] {
result.append(checker)
checker = 1
temp = days[i + 1]
} else {
checker += 1
}
}
}
print(days, result)
return result
}
코드블럭을 보면, (100 - progresses[i]) % speeds[i]
처럼 나머지가 있을 때의 days
배열에 추가하는 값을 1더해서 넣어줬다.
(100 - progresses[i]) / speeds[i]
값을 소수점 첫 째 자리에서 올림한 값을 넣으면 되는데, ceil, floor, trunc, round
등의 소수점을 다루는 메서드를 몰라서!!!! 저렇게 무식하게 값을 구해서 넣은 점이 아주아주 아쉽다.그래서 소수점을 다루는 메서드들에 대한 추가 공부를 해보려고 한다. 복잡한 내용은 없을 듯..?
ceil
: 소수점 올림floor
: 소수점 내림trunc
: 소수점 버림round
: 소수점 반올림까먹지말고 쓸 일 있을 때 야무지게 써먹자!