Notice
Recent Posts
Recent Comments
«   2024/05   »
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 29 30 31
Archives
Today
Total
관리 메뉴

코린이 탈출기

[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 무지의 먹방라이브 본문

문제 풀이

[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 무지의 먹방라이브

명란파스타 2020. 9. 7. 00:01

문제 바로가기

 

코딩테스트 연습 - 무지의 먹방 라이브

 

programmers.co.kr

 

겨우 풀었는데 정확성 테스트도 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>