개발의변화
2023 현대모비스 알고리즘대회 에어컨 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/214289
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
DP를 활용해야 하는 문제였다.
시간,온도 꼴의 이차원 배열을 생성하여 시간 안에서 최소의 전력소비값을 구하는 상향식 접근이 필요했다.
또한 에어컨의 온도를 높이거나 낮출때의 방향설정이 중요한 포인트였다.
def solution(temperature, t1, t2, a, b, onboard):
k = 1000 * 100
t1 += 10
t2 += 10
temperature += 10
# DP[i][j] : i분에 j 온도를 만들 수 있는 가장 적은 전력
DP = [[k] * 51 for _ in range(len(onboard))] # j = 0 : -10 // = 50 : 40
DP[0][temperature] = 0
flag = 1 # 에어컨을 가동했을때 온도가 변하는 방향
if temperature > t2 :
flag = -1
for i in range(1, len(onboard)):
for j in range(51):
arr = [k]
if (onboard[i] == 1 and t1 <= j <= t2) or onboard[i] == 0:
# 1. 에어컨을 키지 않고 실외온도와 달라서 실내온도가 flag 되는 경우
if 0 <= j+flag <= 50 :
arr.append(DP[i-1][j+flag])
# 2. 에어컨을 키지 않고 현재온도 j가 실외온도랑 같아서 변하지 않는 경우
if j == temperature:
arr.append(DP[i-1][j])
# 3. 에어컨을 키고 현재온도가 변하는 경우
if 0 <= j-flag <= 50:
arr.append(DP[i-1][j-flag] + a)
# 4. 에어컨을 키고 현재온도가 희망온도라서 온도가 변하지 않는경우
if t1 <= j <= t2:
arr.append(DP[i-1][j] + b)
DP[i][j] = min(arr)
answer = min(DP[len(onboard)-1])
return answer
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 LV3 표현가능한 이진트리 (1) | 2024.02.14 |
---|---|
프로그래머스 LV3 연속 펄스 부분 수열의 합 (0) | 2024.02.13 |
5월 30일 알고리즘 연습 (0) | 2023.05.30 |
프로그래머스 LV2 연속된 부분의 수열의 합 (0) | 2023.04.18 |
프로그래머스 LV2 질문목록 (0) | 2023.04.16 |