코린이 탈출기
[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 무지의 먹방라이브 본문
겨우 풀었는데 정확성 테스트도 1개 안돌아가고 효율성 테스트에서는
다 시간초과나서 어떻게 푸는지 보고 풀었다.
시간을 기준으로 풀면 안되고 각 접시를 기준으로 풀어야 한다.
<문제풀이 Logic>
1. food라는 새로운 2차원 배열을 만들어서 첫번째 원소에는 그 접시를 먹는 데 걸리는 시간, 두번째 원소에는 idx를 넣는다.
2. food 배열을 시간 기준으로 내림차순 정렬한다.
3. food 배열을 탐색하면서 각 접시를 다 먹었을 때를 가정한다. eatingTime은 한 접시를 다 먹는데 걸리는 시간인데, 그 접시를 다먹는 데 걸리는 시간 * 아직 음식이 남아있는 접시 개수이다. eatingTime이 k보다 작거나 같다면 k를 eatingTime만큼 빼준다. 반대의 경우라면, 현재 음식이 남은 접시들 중 idx 기준으로 다시 정렬하여 (k%len)번째 원소를 찾아서 return하면 된다.
4. for문이 끝났다는 것은 모든 접시가 다 비워진 경우이므로 -1을 return한다.
-전체 코드-
<!DOCTYPE html>
<body>
<script>
function solution(food_times, k) {
var answer = 0;
let total_len = food_times.length;
let food = [];
let time_cnt = 0;
let zero_cnt = 0;
for(let i = 1; i<=total_len; i++)
{
let new_food = [];
new_food.push(food_times[i-1]);
new_food.push(i);
food.push(new_food);
}
food.sort((a, b)=>{
if(a[0] > b[0])
return 1;
else if(a[0] < b[0])
return -1;
else
{
if(a[1]>b[1])
return 1;
else
return -1;
}
})
console.log(food);
for(let i = 0; i<food_times.length; i++)
{
//한 음식을 다 먹는데 걸리는 시간
let len = food_times.length -i;
let eatingTime = (food[i][0] - (i === 0? 0: food[i-1][0]))*len;
if(eatingTime > k)
{
answer = food.slice(i).sort((a, b)=>(a[1]-b[1]))[k%len][1];
console.log("answer");
console.log(answer);
return answer;
}
k-=eatingTime;
}
console.log("answer");
console.log(-1);
return -1;
}
solution([3, 1, 2], 5);
solution([3, 1, 2], 2);
solution([3,1,1,1,2,4,3],12);
solution([4, 3, 5, 6, 2], 7);
solution([4,1,1,5], 7);
solution( [1,1,1,1], 4);
</script>
</body>
'문제 풀이' 카테고리의 다른 글
[2018 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 셔틀버스 (0) | 2020.09.11 |
---|---|
[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 길 찾기 게임 (0) | 2020.09.08 |
[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 후보키 (0) | 2020.09.06 |
[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 실패율 (0) | 2020.09.05 |
[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 오픈채팅방 (0) | 2020.09.05 |