[프로그래머스] [Level 4]무지의 먹방 라이브
2020. 4. 14. 17:16ㆍ프로그래머스/카카오
import java.util.*;
class Solution {
class food{
int turn;
int remainder;
food(int turn, int remainder){
this.turn = turn;
this.remainder = remainder;
}
}
public int solution(int[] food_times, long k) {
int answer = 0;
List<food> remainFood = new LinkedList<>();
for(int i=0; i<food_times.length; i++){
remainFood.add(new food(i+1,food_times[i]));
}
while(k!=0){
while(remainFood.get(0).remainder==0){
remainFood.remove(0);
}
remainFood.get(0).remainder --;
if(remainFood.get(0).remainder >0){
remainFood.add(new food(remainFood.get(0).turn,remainFood.get(0).remainder));
remainFood.remove(0);
}else{
remainFood.remove(0);
}
if(remainFood.isEmpty()){
return -1;
}
k--;
}
answer = remainFood.get(0).turn;
return answer;
}
}
정확성 테스트는 통과하였으나 효율성 테스트를 통과하지 못했다.
우선 ArrayList는 탐색에 효과적이고 LinkedList는 삽입과 삭제에 효과적이라는 사실을 이 문제를 풀다가 알게되었다.
0초부터 k초까지의 리스트의 순서를 바꿔가며 k초 이후의 순서를 알아냄.
>> 결과적으로 k가 매우 클때는 시간초과를 일으킴
>> k를 1씩 줄이는 것이 아니라 크게크게 줄여갈 수 있는 방법을 생각해 봐야겠다.
import java.util.*;
class Solution {
class food{
int turn;
int remainder;
food(int turn, int remainder){
this.turn = turn;
this.remainder = remainder;
}
}
public int solution(int[] food_times, long k) {
int n=food_times.length;
int flag = 0;
int i=0;
List<food> remainFood = new LinkedList<>();
for(int j=0; j<n; j++){
remainFood.add(new food(j+1,food_times[j]));
}
Collections.sort(remainFood, new Comparator<food>(){
public int compare(food f1, food f2){
return f1.remainder - f2.remainder;
}
});
for(food f : remainFood){
long depth = f.remainder - flag;
if(depth!=0){
long spend = depth * n;
if(spend <=k){
k -=spend;
flag = f.remainder;
}else{
k %= n;
remainFood = remainFood.subList(i,food_times.length);
Collections.sort(remainFood,new Comparator<food>(){
public int compare(food f1, food f2){
return f1.turn - f2.turn;
}
});
return remainFood.get((int)k).turn;
}
}
++i;
--n;
}
return -1;
}
}
remainder를 정렬하여 k를 한번에 많이씩 줄여나가는 방법으로 하니 통과하였다.
'프로그래머스 > 카카오' 카테고리의 다른 글
[프로그래머스] 괄호변환 (0) | 2020.04.18 |
---|---|
[프로그래머스] 후보 키 (0) | 2020.04.15 |
[프로그래머스][3차] 방금그곡 (0) | 2020.04.14 |
[프로그래머스][1차] 캐시 (0) | 2020.04.13 |
[프로그래머스] 튜플 (0) | 2020.04.12 |