본문 바로가기
반응형

DP38

프로그래머스 에어컨 - C++ 풀이 1. dp(currTemp, t): 현재 시각이 t초이고, 현재 온도가 currTemp일 때 남은 시간동안 쾌적함을 유지하기 위한 최소비용 2. 1도 올리는 경우, 1도 내리는 경우, 희망온도를 현재온도로 유지하는 경우, 아예 끄는 경우 중 비용이 최소인 경우를 선택한다. 1. dp(currTemp, t): 현재 시각이 t초이고, 현재 온도가 currTemp일 때 남은 시간동안 쾌적함을 유지하기 위한 최소비용 dp(currTemp, t)를 위와 같이 정의하자. 2. 1도 올리는 경우, 1도 내리는 경우, 희망온도를 현재온도로 유지하는 경우, 아예 끄는 경우 중 비용이 최소인 경우를 선택한다. 어차피 온도는 1초마다 1씩만 내려가거나 올라갈 수 있다. 따라서 희망온도는 신경쓰지 않아도 된다. 현재 온도가 .. 2023. 9. 7.
프로그래머스 광물 캐기 - C++ 풀이 1. dp(dia, iron, stone, idx) = 곡괭이의 각 개수가 (dia, iron, stone)개일 때 minerals[idx...]를 처리하기 위한 최소 피로도 2. 세 가지 곡괭이를 하나씩 사용해보고 최소 피로도를 갖는 경우를 찾는다. 1. dp(dia, iron, stone, idx) = 곡괭이의 각 개수가 (dia, iron, stone)개일 때 minerals[idx...]를 처리하기 위한 최소 피로도 dp(dia, iron, stone, idx)를 위와 같이 정의하자. 각 곡괭이의 개수는 최대 5개이고, 캐야 하는 광물의 개수는 최대 50개로 매우 작기 때문에 O(MN^3)의 시간복잡도도 충분하다. 기저사례는 곡괭이가 하나도 남지 않거나, 남은 광물이 없는 경우이다. 2. 세 가지.. 2023. 9. 5.
백준 9184번 신나는 함수 실행 - C++ 풀이 1. 메모이제이션을 통해 시간을 줄일 수 있다. 2. 재귀 함수를 똑같이 구현하되, 이미 구했던 값이라면 재귀호출을 하지 않고 저장해둔 값을 바로 리턴한다. 1. 메모이제이션을 통해 시간을 줄일 수 있다. 단순한 재귀 호출을 통해 w(a, b, c)를 구할 경우 중복되는 호출이 많아진다. 20 이하의 a, b, c 에 대해서만 구해주면 되므로 총 구해야 하는 함수값은 20^3개 뿐이다. 모든 (a, b, c)에 대해 w(a, b, c) 값을 저장해두자. 2. 재귀 함수를 똑같이 구현하되, 이미 구했던 값이라면 재귀호출을 하지 않고 저장해둔 값을 바로 리턴한다. 재귀 함수를 똑같이 구현하되, 만약 이미 구했던 값이라면 재귀호출을 하지 않고 저장해두었던 값을 바로 리턴해주면 된다. #include #incl.. 2023. 9. 4.
백준 1943번 동전 분배 - C++ 풀이 1. 동전들의 금액 합이 홀수인 경우 절대 둘로 나눌 수 없다. 2. dp(idx, price): [idx...]번 동전들로 price원을 만들 수 있는가 3. dp(idx, price) = max(dp(idx+1, price - coin*cnt)) (0 ≤ cnt ≤ idx번 동전개수) 1. 동전들의 금액 합이 홀수인 경우 절대 둘로 나눌 수 없다. 만약 동전들의 금액 합이 홀수인 경우 절대 둘로 나눌 수 없다. 짝수인 경우에는 sum/2를 만들 수 있는지 확인해보면 된다. 1. dp(idx, price): [idx...]번 동전들로 price원을 만들 수 있는가 dp(idx, price)를 위와 같이 정의하자. 우리가 최종적으로 구하려는 값은 dp(0, sum/2)이다. (이때 sum은 주어진 동전들.. 2023. 8. 12.
백준 1890번 점프 - C++ 풀이 1. dp[r][c] : (r, c)에서 도착지점까지 가는 경로의 수 2. dp[r][c] = dp[r + board[r][c]][c] + dp[r][c + board[r][c]] 1. dp[r][c] : (r, c)에서 도착지점까지 가는 경로의 수 dp[r][c]를 위와 같이 정의하자. 기저사례는 도착지점인 경우가 되겠다. 2. dp[r][c] = dp[r + board[r][c]][c] + dp[r][c + board[r][c]] 각 칸에서 board[r][c]만큼 아래쪽으로 가는 방법과 오른쪽으로 가는 방법이 있으므로 이 두가지 방법으로 이동했을 때의 경로의 수를 더해주면 된다. 이때 점프 거리가 보드 밖으로 넘어가지 않는지 체크해주어야 하고, 만약 board[r][c] = 0인 경우 그 자리에서 .. 2023. 8. 9.
반응형