새소식

Computer Science/코딩테스트 문제 풀이

[N시간만에 끝내는 Python 코딩테스트] 11편 : 2019 카카오 코딩테스트 4번 무지의 먹방라이브

  • -

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))
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.