프로그래머스 LEVEL 4(무지의 먹방 라이브)
-
사용 언어 : 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을 가진 음식 중 다시 먹을 음식의 인덱스 계산
- 한바퀴 돌 때마다 k를 (현재 time 값 * 남은 음식 수(restFoodNum) === 소요 시간(eatTime)) 만큼 감소
- 정렬된 값을 돌며
-
회고 :
- 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