프로그래머스 LV3 에어컨 문제를 풀어봤다

https://school.programmers.co.kr/learn/courses/30/lessons/214289

DP로 풀어봤다.

로직은 miute * temp 의 2차원 배열을 만들고 dp[minute][temp]에 그 온도를 유지할 수 있는 최솟값을 저장해 나가는 방식이다.

현재 온도 temp를 만들기 위해서 이전 온도에서 +1을 하는 방법, 유지하는 방법, -1을 하는 방법 총 3가지가 있다. 그리고 경우의 수에 따라 a or b or 0을 더해주는 방식이다

그리고 추가적으로 -10도까지의 온도를 표현하기 위해 함수를 하나 추가했다

Untitled

-10도는 41번째 인덱스에 저장하고, -1도는 50번째 인덱스에 저장한다

점화식은 총 6가지 나온다.

  1. temp-1 ⇒ temp && 이전 온도(temp-1)가 실외온도보다 낮을 경우(비용 0)
  2. temp-1 ⇒ temp && 이전 온도(temp-1)가 실외온도보다 같거나 높을경우(비용 a)
  3. temp ⇒ temp && 이전 온도(temp)가 실외온도와 같을 경우(비용 0)
  4. temp ⇒ temp && 이전 온도(temp)가 실외온도와 같지 않을 경우(비용 b)
  5. temp+1 ⇒ temp && 이전 온도(temp+1)가 실외 온도보다 높을 경우(비용 0)
  6. temp+1 ⇒ temp && 이전 온도(temp+1)가 실외 온도보다 같거나 낮을 경우(비용 a)