Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 오픽
- ㅂ
- 이진탐색 #나무 자르기
- 디피
- 피보나치수열
- 다이나믹프로그래밍
- 오픽점수잘받는방법
- 오픽공부법
- 이진탐색
- XML주석
- opic
- XML
- English
- fibo
- 안드로이드주석
- 바텀업
- dynamicProgramming
- 메모이제이션
- 오픽가격
- topdown
- 탑다운
- 오픽노잼공부방법
- 영어회화
- stack 스택
- 안드로이드
- 주석
- dp
- 오픽노잼
- 영어말하기
Archives
RUBY
[카카오] 무지의 먹방 라이브 본문
출처:: 2019 카카오 신입 공채 https://programmers.co.kr/learn/courses/30/lessons/42891
분류:: 그리디
1. 문제 이해 및 해결과정
- 모든 음식을 시간을 기준으로 정렬한 뒤에, 시간이 적게 걸리는 음식부터 제거해 나가는 방식을 이용한다는 아이디어까지는 생각하였다. |
2. 풀이방법
1. 그리디(최소힙)
import heapq
def solution(food_times, k):
#전체 음식을 먹는 시간보다 k가 크거나 같다면 -1
if sum(food_times)<=k:
return -1
#시간이 작은 음식부터 빼야하므로 우선순위 큐 이용
q=[]
for i in range(len(food_times)):
#(음식시간, 음식번호) 형태로 우선순위 큐에 삽입
heapq.heappush(q,(food_times[i],i+1))
sum_value=0 #먹기 위해 사용한 시간
previous =0 #직전에 다 먹은 음식 시간
length = len(food_times) #남은 음식의 개수
#sum_value + (현재의 음식시간 - 이전 음식 시간)*현재 음식 개수 vs k
while sum_value + ((q[0][0] - previous)*length)<=k:
now = heapq.heappop(q)[0]
sum_value +=(now-previous)*length
length-=1 #다 먹은 음식 제외
previous = now #이전 음식 시간 재설정
#남은 음식 중에서 몇 번째 음식인지 확인하여 출력
result = sorted(q,key=lambda x:x[1]) #음식의 번호를 기준으로 정렬
return result[(k-sum_value) % length][1] #남은 시간 % 남은 음식
3. 오답원인
1. 풀이 오류
def solution(food_times, k):
answer = 0
foodlen=len(food_times)
li=[]
for i in range(foodlen):
li.append((food_times[i],i+1))
li.sort()
answer=-1
for i in range(foodlen):
k-=li[i][0]
if k<0:
answer=li[i][1]
break
#print(li)
return answer
4. 알게된 점
'PS > This' 카테고리의 다른 글
[백준] 최종 순위 (0) | 2020.09.15 |
---|---|
만들 수 없는 금액 (0) | 2020.09.13 |
볼링공 고르기 (0) | 2020.09.12 |
[백준] 럭키 스트레이트 (0) | 2020.09.10 |
[이론] 구현 (0) | 2020.09.10 |
Comments