문제 푸는데 걸린시간 : 40분, 큐 peek ,poll 함수를 까 먹어서 찾는데 시간이 걸림 + ceil(올림 함수도)
아이디어 도출 : 5분 , 큐를 사용하여 어떤 형식으로 큐에 값을 넣을지 생각함.
package com.example.codingtest_practice1.programmers.level2
import java.util.LinkedList
import java.util.Queue
import kotlin.math.*
// 기능 개발
// 걸린시간 40분 , 문제 구현 35분 아이디어 도출 5분
fun solution_dd(progresses: IntArray, speeds: IntArray): IntArray {
var answer = intArrayOf()
var days= intArrayOf()
val queue:Queue<Int> = LinkedList()
for(i in 0..progresses.size-1){
days=days+ceil((100 - progresses[i]) / speeds[i].toDouble()).toInt()
}
for(i in 0 until days.size){
queue.add(days[i])
}
while(queue.isNotEmpty()){
val value=queue.poll()
var count=1
while (queue.isNotEmpty()){
if(value>=queue.peek()){
queue.poll()
count++
}
else{
answer=answer+count
break
}
}
if(queue.isEmpty()){ // 마지막의 경우임
answer=answer+count
}
}
return answer
}
문재해결 POINT
// days 라는 배열을 선언하여, ceil((100 - progresses[i]) / speeds[i].toDouble()).toInt()값을 저장한다.
// 여기서 이 값은, ((100 - 작업 진도) / 작업 속도) 의 값의 올림한 값이다 , 이 days 값을 큐에 넣고 시작한다.
// while문은 이중 중첩으로 되어 있는데, 첫번재 while문은 큐가 빌 때 까지 진행한다.
// 만저 큐에서 poll 한 후 count를 1로 초기화 한후 다음 while문으로 들어가게 된다
// 이때 value의 값과 peek한 값을 비교 하게 되는데 value의 값이 크거나 같은 경우 즉. 앞에 있는 모든 기능이 완성되지 않은 경우이다.
// 이 경우 poll하고 count를 증가 시킨다.
// value가 작은 경우는 앞에 있는 기능이 완료된 경우 이므로 answer 배열에 추가 시킨다.
// 마지막의 경우에는 queue가 빈 경우 이므로 answer에 추가하지 못하므로 if조건 문을 넣어 추가시칸다.
'코딩테스트 준비(kotlin) > 자료구조' 카테고리의 다른 글
[프로그래머스 kotlin] 다리를 지나는 트럭 (0) | 2024.07.09 |
---|---|
[프로그래머스 kotlin] 롤케이크 자르기 (0) | 2024.07.01 |
[프로그래머스 kotlin] 프로세스 (0) | 2024.06.24 |
[프로그래머스 kotlin] 괄호 회전하기 (0) | 2024.06.18 |
[kotlin] 백준 1874번 : 스택 수열 (0) | 2023.08.10 |