👀 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42586?language=kotlin
👊 도전
1. 설계
- 문제 조건에 맞게 진행
2. 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import kotlin.math.ceil
class Solution {
fun solution(progresses: IntArray, speeds: IntArray): IntArray {
/*
day[i] = (100-p[i])/s[i].toFloat
day[i] = ceil(day[i])
cnt = 1 temp = day[0]
for i =1 ~
if (temp>day[i]) -> cnt ++
else -> temp = day[i], answer.add(cnt), cnt = 1
answer.add(cnt)
*/
val answer = arrayListOf<Int>()
val n = progresses.size
val day = IntArray(n)
for (i in 0 until n) {
val temp = (100 - progresses[i]) / speeds[i].toFloat()
day[i] = ceil(temp).toInt()
}
var temp = day[0]
var cnt = 1
for (i in 1 until n) {
if (temp >= day[i]) {
cnt++
} else {
answer.add(cnt)
temp = day[i]
cnt = 1
}
}
answer.add(cnt)
return answer.toIntArray()
}
}
3. 결과
🤟 성공 🤟
4. 설명
- 작업일 수 계산
- 남은 작업일 수는 (100-p[i]/s[i].toFloat()) 를 올림(ceil)한 것과 같다.
- 소수점 아래 값을 받기 위해 나눌 값을 float형으로 변환한다.
- 이후 ceil() 메소드를 통해 올림 처리를 해준다.
- 작업일 수 체크
- 0 번째 인덱스로 temp(지금까지 필요한 작업일), cnt(그 개수)를 초기화 한다.
- 1부터 n 까지 확인하며 temp>=day[i]면 day[i]를 temp에 포함시킬 수 있으므로 cnt ++,
- 아니라면 지금까지의 cnt를 answer에 저장하고, day[i]를 기준으로 temp와 cnt를 초기화한다.
- 마지막 cnt도 포함
- for문이 종료된 후 마지막 값은 answer에 반영되지 않았기 때문에 이를 포함한다.