[Algorithm] D-6 무지의 먹방 라이브 - 그리디

Jifrozen·2021년 7월 4일
1

Algorithm

목록 보기
12/70

https://programmers.co.kr/learn/courses/30/lessons/42891

저번에 못푼 문제 풀기..

무지의 먹방 라이브

코드

from operator import itemgetter


def solution(food_times, k):
    foods = []
    for i in range(len(food_times)):
        foods.append([food_times[i], i])

    foods.sort()
    pretime = 0
    n = len(food_times)
    for i in range(len(food_times)):
        time = foods[i][0] - pretime
        if time != 0:
            spend = time * n
            if spend <= k:
                k -= spend
                pretime = foods[i][0]
            else:
                k %= n
                sublist = sorted(foods[i:], key=itemgetter(1))
                return sublist[k][1] + 1
        n -= 1
    return -1


print(solution([3,1,2], 5))

풀이 과정

  1. 아이디어

음식양이 적은순으로 정렬하면 가장 작은 음식량을 기준으로 한줄씩 없앨수잇다. 음식양과 인텍스가 같이 움직일 수 있도록 설정해줘야한다. -> 2차원 배열

  1. 2번째 음식양과 3번째 음식양이 같다면?
    1,3,3,5 이런경우
    pretime = 0을 두고 이전의 음식양을 얻는다.
    time = foods[i][0] - pretime 지금음식양과 이전 음식양을 비교한다.
    0이면 넘어가고 0이 아니면 먹어치운다.

  2. 한 접시 음식을 다 먹어치우면?
    n = len(food_times)
    처음엔 모든 음식접시 존재
    다먹으면 n -= 1 접시 치워줌

  3. k가 5인데 한줄에 남은 음식이 5초과면?

    음식량이 더 크면
    현재 음식접시 개수를 k로 나눠 나머지 계산
    5%6=1

sublist = sorted(foods[i:], key=itemgetter(1))
현재 남은 음식접시부터 인덱스 순으로 정렬

return sublist[k][1] + 1

4개의 댓글

comment-user-thumbnail
2021년 7월 4일

알고리줌님 안녕하세요 파파이썬입니다
문제 설계방법도 직접 올려서 어려웠던 문제를 다른 방법으로 풀어보는 것도 복습하는데 정말 좋은 방법인것 같아요!
잘 보고 갑니다! 한주동안 고생하셨습니다

답글 달기
comment-user-thumbnail
2021년 7월 4일

안녕하세요, 김덕우입니다! 무지 저번에 시간 초과 오류 나왔다고 하셨는데, 이렇게 다시 푸신 것 보니 멋집니다!! 저도 알고리줌님 코드 공부해서 고쳐봐야겠어요!

답글 달기
comment-user-thumbnail
2021년 7월 4일

안녕하세요 😊입니다! 풀이과정과 아이디어를 보기 좋게 정리해두셔서 저도 나중에 참고하면서 풀어보려고요!! 이번주 수고 많으셨습니다👍

답글 달기
comment-user-thumbnail
2022년 7월 20일

안녕하세요! 코드가 좋아서 그러는데, 링크 공유해도 될까요?

답글 달기