안드로이드 개발자의 창고
[프로그래머스] 기능개발(Lv.2) - 코틀린 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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
}
}
'코딩테스트' 카테고리의 다른 글
[백준] 10986번 : 나머지 합 - 코틀린 (0) | 2023.06.16 |
---|---|
[백준] 11659번 : 구간 합 구하기4 - 코틀린 (0) | 2023.06.09 |
[프로그래머스]의상(Lv.2) - 코틀린 (0) | 2023.05.29 |
[프로그래머스] k의 개수(Lv.0) - 코틀린 (0) | 2023.05.14 |
[프로그래머스] 치킨 쿠폰(Lv.0) - 코틀린 (0) | 2023.05.14 |