Search
Duplicate

에어컨

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def solution(temperature, t1, t2, a, b, onboard): mintemp, maxtemp = t1, t2 # dp[temp][t] = 시간 t에 실내온도가 (temp+10)도인 # 상황을 만드는 최소 소비 전력 dp = [[1e9] * 51 for _ in range(1001)] # 초기화 (t=0) dp[0][temperature+10] = 0 for t, is_onboard in enumerate(onboard[1:], 1): # 승객이 탑승한 상황에서는 오직 mintemp <= temp <= maxtemp # 인 경우만 고려하면 된다. if is_onboard: mintemp_to_consider = mintemp maxtemp_to_consider = maxtemp + 1 else: mintemp_to_consider = -10 maxtemp_to_consider = 40 + 1 for temp in range(mintemp_to_consider, maxtemp_to_consider): if temp == temperature: candidates = [dp[t-1][temp+10]] if temp + 10 != 0: candidates.append(dp[t-1][temp-1+10]) if temp + 10 != 50: candidates.append(dp[t-1][temp+1+10]) dp[t][temp+10] = min(candidates) elif temp > temperature: candidates = [dp[t-1][temp+10] + b] if temp + 10 != 0: candidates.append(dp[t-1][temp-1+10] + a) if temp + 10 != 50: candidates.append(dp[t-1][temp+1+10]) dp[t][temp+10] = min(candidates) else: candidates = [dp[t-1][temp+10] + b] if temp + 10 != 0: candidates.append(dp[t-1][temp-1+10]) if temp + 10 != 50: candidates.append(dp[t-1][temp+1+10] + a) dp[t][temp+10] = min(candidates) answer = min(dp[len(onboard) - 1]) return answer
Python
복사

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges