Search
Duplicate

에어컨

Level
3
문제 진행 상태
코드 완료
해설 작성 중
알고리즘 & 자료구조
DP
정답률 (%)
6
태그
2023 현대모비스 알고리즘 경진대회 예선

문제 출처

풀이 과정

전체 코드

def solution(실외온도, 하한온도, 상한온도, 불일치_소비전력, 일치_소비전력, 탑승_리스트): '''action: 에어컨 무가동/ 에어컨 현재 온도 유지/ 에어컨 온도 상승/ 에어컨 온도 하강''' 실외온도 += 10 # DP 테이블 구현을 위하여, 실외온도/하한온도/상한온도를 조정함. 하한온도 += 10 상한온도 += 10 최소_소비전력표 = [[1e+8 for _ in range(50+1)] for _ in range(1000)] # DP 테이블 최소_소비전력표[0][실외온도] = 0 # 0분에 실내온도(실외온도)로 이동하기 위한 소비전력은 0 for 현재시간 in range(1, len(탑승_리스트)): # DP 테이블 기록 if 탑승_리스트[현재시간] == 0: # 현재 시간에 승객이 탑승하지 않는 경우 시작온도, 종료온도 = min(실외온도, 하한온도), max(실외온도, 상한온도) else: 시작온도, 종료온도 = 하한온도, 상한온도 for 목표온도 in range(시작온도, 종료온도+1): # 현재 시간에 승객이 탑승하는 경우 if 목표온도 < 실외온도: if 목표온도 == 0: 최소_소비전력표[현재시간][0] = min( 최소_소비전력표[현재시간-1][0]+일치_소비전력, 최소_소비전력표[현재시간-1][1]+불일치_소비전력 ) else: # 0 < 목표온도 < 50 최소_소비전력표[현재시간][목표온도] = min( 최소_소비전력표[현재시간-1][목표온도-1], 최소_소비전력표[현재시간-1][목표온도]+일치_소비전력, 최소_소비전력표[현재시간-1][목표온도+1]+불일치_소비전력 ) elif 목표온도 > 실외온도: # 실외온도가 아무리 높아도 50도가 될 수는 없음 if 목표온도 == 50: 최소_소비전력표[현재시간][50] = min( 최소_소비전력표[현재시간-1][49]+불일치_소비전력, 최소_소비전력표[현재시간-1][50]+일치_소비전력, ) else: # 0 < 목표온도 < 50 최소_소비전력표[현재시간][목표온도] = min( 최소_소비전력표[현재시간-1][목표온도-1]+불일치_소비전력, 최소_소비전력표[현재시간-1][목표온도]+일치_소비전력, 최소_소비전력표[현재시간-1][목표온도+1] ) else: # 목표온도 == 실외온도 if 목표온도 == 0: 최소_소비전력표[현재시간][0] = min( 최소_소비전력표[현재시간-1][0], 최소_소비전력표[현재시간-1][1] ) elif 목표온도 == 50: 최소_소비전력표[현재시간][50] = min( 최소_소비전력표[현재시간-1][49], 최소_소비전력표[현재시간-1][50] ) else: # 0 < 목표온도 < 50 최소_소비전력표[현재시간][목표온도] = min( 최소_소비전력표[현재시간-1][목표온도-1], 최소_소비전력표[현재시간-1][목표온도], 최소_소비전력표[현재시간-1][목표온도+1] ) return min(최소_소비전력표[len(탑승_리스트)-1])
Python
복사