본문 바로가기

Programmers

[Programmers] 기능 개발 - kotlin

기능 개발 (Level2)

link - https://programmers.co.kr/learn/courses/30/lessons/42586

 

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

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

1. 문제 파악하기

개발자가 기능을 배포하려고 하는데, 기능은 배포 순서가 정해져있다.

기능의 작업진도와 기능 개발 속도가 주어지면 몇개의 기능을 한번에 배포할수 있는지 순차대로 출력한다

- 입력 :

progresses :  배포 순서대로 작업 진도가 적힌 배열

speeds : 개발 속도 적힌 배열

 

- 출력 :  각 배포마다 멸개의 기능이 배포되는지 순차로 출력

- 조건 : 배포는 하루에 한번

 

2. 아이디어

-  현재 배포되어야하는 우선순위가 있는 순서를 pointer 로 저장한다

-  pointer가 모든 작업을 돌지 않은 동안

- 종료할 기능(진도가 100 이상인)이 있으면 pointer를 옮기며 현재 일자에 끝낼수있는 기능의 수를 계산한다

- 현재 종료할수있는 기능이 없는경우 하루를 더 지내며 진도 + 개발속도 를 계산한다

 

- 큐를 사용하는 방법도 가능한데 시간 복잡도가 더 효율적으로 가능할듯 하다.. 근데 아이디어가 늦게떠올라서 그냥 넘어간다

 

3. 풀이

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
class Solution {
    fun solution(progresses: IntArray, speeds: IntArray): IntArray {
        var answer = MutableList<Int>(0, {0})
        var pointer = 0
        
        while (pointer < progresses.size) {
            if (progresses[pointer] >= 100) {
                //for문돌면서 포인터 옮기기
                var countProgresses = 0
                
                for (i in pointer until progresses.size) {
                    if (progresses[i] >=100) {
                        countProgresses++
                        pointer = i
                    } else {
                        break
                    }
                }
                pointer++
                answer.add(countProgresses)
            }
            // 하루 넘어감
            for (index in 0 until progresses.size) {
                progresses[index] += speeds[index]
            }    
        }
        
        return answer.toIntArray()
    }
}
cs