문제 링크입니다: https://school.programmers.co.kr/learn/courses/30/lessons/389480
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이차원 배열 DP를 통해 A의 누적 흔적이 a, B의 누적 흔적이 b인 상태 가능 여부를 계산하면 되는 문제였습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <string> | |
#include <vector> | |
using namespace std; | |
const int MAX = 120 + 12; | |
// dp[a][b] : A의 누적 흔적이 a, B의 누적 흔적이 b인 상태 가능 여부 | |
bool dp[MAX][MAX]; | |
int solution(vector<vector<int>> info, int n, int m) { | |
int itemCnt = info.size(); | |
dp[0][0] = true; | |
for (int i = 0; i < itemCnt; i++) | |
{ | |
bool nextDp[MAX][MAX] = {false, }; | |
int traceA = info[i][0]; | |
int traceB = info[i][1]; | |
for (int a = 0; a < n; a++) | |
{ | |
for (int b = 0; b < m; b++) | |
{ | |
if (!dp[a][b]) | |
{ | |
continue; | |
} | |
if (a + traceA < n) | |
{ | |
nextDp[a + traceA][b] = true; | |
} | |
if (b + traceB < m) | |
{ | |
nextDp[a][b + traceB] = true; | |
} | |
} | |
} | |
for (int a = 0; a < n; a++) | |
{ | |
for (int b = 0; b < m; b++) | |
{ | |
dp[a][b] = nextDp[a][b]; | |
} | |
} | |
} | |
for (int a = 0; a < n; a++) | |
{ | |
for (int b = 0; b < m; b++) | |
{ | |
if (dp[a][b]) | |
{ | |
return a; | |
} | |
} | |
} | |
return -1; | |
} |

개발환경: Programmers IDE
지적, 조언, 질문 환영합니다! 질문 남겨주세요~
반응형
'알고리즘 > programmers' 카테고리의 다른 글
[Programmers] 경사로의 개수 (0) | 2025.02.20 |
---|---|
[Programmers] 봉인된 주문 (0) | 2025.02.18 |
[Programmers] 서버 증설 횟수 (1) | 2025.02.15 |
[Programmers] 홀짝트리 (10) | 2025.02.14 |
[Programmers] 지게차와 크레인 (0) | 2025.02.13 |