프로그래머스 LEVEL 4(무지의 먹방 라이브)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-05-24

  • 해결 방법 :

    • k의 최대값이 2 x 10^13 이기에 food_times으로 문제 해결
    • food_times를 [index, time] 형태로 변환 후 time 오름차순 정렬
      • 정렬된 값을 돌며
        • 한바퀴 돌 때마다 k를 (현재 time 값 * 남은 음식 수(restFoodNum) === 소요 시간(eatTime)) 만큼 감소
          • 예를 들어 [1, 2, 3]일 때 한바퀴 돌면 [0, 1, 2], 두바퀴 돌면 [0, 0, 1] …
        • k가 eatTime보다 작을 때 1 이상의 time을 가진 음식 중 다시 먹을 음식의 인덱스 계산
  • 회고 :

    • x
  • 코드

    function solution(food_times, k) {
      const foods = food_times.map((food_time, i) => [i + 1, food_time]).sort((a, b) => a[1] - b[1]);
    
      let prevFoodTime = 0;
    
      for (let i = 0; i < foods.length; i++) {
        const restFoodNum = foods.length - i;
        const eatTime = (foods[i][1] - prevFoodTime) * restFoodNum;
        prevFoodTime = foods[i][1];
    
        if (k < eatTime) {
          return foods.slice(i).sort((a, b) => a[0] - b[0])[k % restFoodNum][0];
        }
    
        k -= eatTime;
      }
    
      return -1;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges