Archives
Recent Posts
«   2025/02   »
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
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[프로그래머스] 기능개발(Lv.2) - 코틀린 본문

코딩테스트

[프로그래머스] 기능개발(Lv.2) - 코틀린

Wise-99 2023. 5. 29. 22:52
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


❓ 문제 풀이

고득점 kit 스택/큐에 포함되어있는 문제로 Queue를 사용하여 풀었다.

  • progress와 speeds 배열을 Queue로 변환한다.
  • 작업을 하나씩 제거하며 배포되는 작업 수를 카운트할 변수(cnt)를 선언한다.
  • 작업이 완료되는 날짜를 카운트할 변수(time)를 선언한다.
  • 작업 진도 + (작업 속도 * 날짜)를 계산한다.
  • 계산한 결과가 100이 넘으면
    • Queue에 저장되어있는 작업과 속도를 제거한다.
    • 한 번에 배포되는 작업을 카운트한다.
  • 100이 넘지 않으면
    • answer에 cnt를 담는다.
    • cnt를 초기화한다.
  • while문 바깥에서 answer에 cnt 추가함으로써 마지막으로 작업이 완료된 갯수를 추가한다.

 


✔️ 내 코드

import java.util.*

class Solution {
    fun solution(progresses: IntArray, speeds: IntArray): IntArray {
        var answer = intArrayOf()
        var cnt = 0 // 한번에 배포되는 기능의 수
        var time = 1 // 작업이 완료되는 날짜
        
        var progressesQueue : Queue<Int> = LinkedList<Int>()
        var speedsQueue : Queue<Int> = LinkedList<Int>()
        
        // progresses, speeds를 Queue로 변환
        for(i in 0 until progresses.size){
            progressesQueue.add(progresses[i])
            speedsQueue.add(speeds[i])
        }
        
        // queue가 비어있지 않은 동안 반복
        while(!progressesQueue.isEmpty()){
            
            // 작업 진도 + (작업 속도 * 날짜) >= 100
            if(progressesQueue.element() + speedsQueue.element()*time >= 100){
                
                // 작업 제거 및 배포 기능 수 ++
                progressesQueue.remove()
                speedsQueue.remove()
                cnt++
            }
            
            // 100이 아니라면
            else {
                if(cnt >= 1){ // 완료된 작업 수가 1 이상이면
                    answer = answer.plus(cnt) // answer에 추가하고 작업 수 초기화
                    cnt = 0
                }
                
                time ++ // 날짜++
            }
        }
        answer = answer.plus(cnt) // 마지막 완료되는 작업 수 추가
        
        return answer
    }
}