Lv2. 기능개발

Hello·2022년 8월 5일

코딩테스트 연습 > 기능개발

1. 풀이 설명

python

  1. 순서대로 배포될 수 있기 때문에 <순서: 진도> 로 개발할 기능을 저장한다. dict_p

    진도[93, 30, 55] ---> {0: 93, 1: 30, 2: 55}
  2. dict_p 의 개수가 0 이상일 때까지 while문을 돌면서 (아직 개발할 기능이 남아있음)
    속도 만큼을 더한다.

  3. 현재 가리키는(p) 개발의 진도가 100 이상이면, 이후 100 이상의 기능들까지 count 를 새서 answer 에 추가한다.


kotlin

  1. 100 - 진도 / 속도 로 일 해야 하는 날짜를 저장한다. (workDays)

  2. workDays를 1번 for문 돌면서,
    현재 가리키는 (p) 날짜가 뒤의 날짜보다 크거나 같다면 count 를 +1 한다. (동시에 배포되는 개발 건수 + 1)

2. 나의 풀이

python

def solution(progresses, speeds):
    answer = []
    size = len(progresses)
    dict_p = dict(zip(range(size), progresses))

    p = 0
    while len(dict_p) > 0:
        for i in range(p, size):
            dict_p[i] += speeds[i]

        count = 0
        if dict_p[p] >= 100:
            i = p
            while i < size and dict_p[i] >= 100:
                dict_p.pop(i)
                i += 1
                p += 1
                count += 1
            answer.append(count)

    return answer

kotlin

import kotlin.math.ceil

class Solution {
    fun solution(progresses: IntArray, speeds: IntArray): IntArray {
        val workDays = IntArray(progresses.size) { i ->
            ceil((100 - progresses[i]) / speeds[i].toDouble()).toInt()
        }

        val answer = mutableListOf<Int>()
        var p = 0
        var count = 0
        for(i in workDays.indices) {
            if(workDays[p] >= workDays[i]) {
                count += 1
            } else {
                answer.add(count)
                p = i
                count = 1
            }
        }
        answer.add(count)
        return answer.toIntArray()
    }
}

3. 배운점

python

  1. dictionary 에서 item 제거하기
dict.pop('key')

del dict['key']

kotlin

  1. 반올림, 올림, 내림
import kotlin.math.ceil

round()		// 반올림 	- Double
ceil()		// 올림 	- Double
floor()		// 내림 	- Double
profile
안녕하세요 :)

0개의 댓글