Computer Science/코딩테스트 문제 풀이
[N시간만에 끝내는 Python 코딩테스트] 11편 : 2019 카카오 코딩테스트 4번 무지의 먹방라이브
4356
2023. 12. 26. 00:02
https://school.programmers.co.kr/learn/courses/30/lessons/42891
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
https://www.youtube.com/watch?v=hRJoCH8vECI&list=PLkfUwwo13dlUW9tPNXYnr-6EmYuUOvlko&index=11
미친 너무 어렵다.
deque 생각했는데 효율성 테스트에 통과가 안되는구나
완전히 다르게 생각해야한다.
하나씩 하나씩 거치는 과정이 아니라 한번에 뛰어넘는 단계를 생각해야한다.
# 시간 K 초가 매개변수로 주어질 때 몇 번 음식부터 다시 섭취하면 되는지 return 하도록 solution 함수를 완성하라.
'''
K초후 몇 번 음식을 먹으면 되는지만 찾으면 되는 문제이다.
'''
def solution(food_times, k):
answer = 0
while k >= 0:
if sum(food_times) <= k: # 방송 중단 전에 다 먹어서 먹을 게 없으면
return -1 # -1 반환
rest_table = len(food_times) - food_times.count(0) # 영외에 남은 테이블
rotations = k // rest_table # 회전수
rest_rotations = k % rest_table # 회전한 나머지 수
for idx, val in enumerate(food_times):
if food_times[idx] != 0: # 다 안먹은 음식
# 하나씩 먹는것을 보는게 아니라 rotations씩 한꺼번에 계산하는 방법으로 효율성을 극대화함
food_times[idx] = val - rotations
if food_times[idx] < 0: # rotations씩 돌다가 다 먹어 버림 음수 되버림
rest_rotations -= food_times[idx] # 이제 회전한 나머지 수가
food_times[idx] = 0
k = rest_rotations
rest_table = len(food_times) - food_times.count(0) # 영외에 남은 테이블
if k + 1 <= rest_table:
for i in food_times:
answer += 1
if i != 0:
k -= 1
if k == -1:
return answer
if __name__=="__main__":
food_times = [10, 1, 30, 1000]
k = 100
print(solution(food_times, k))