7강 RGB 색칠하기 질문 있습니다.
// 아래 풀이법에서 제시해주신 풀이법과 비슷하게 풀이한 것 같으나 백준에서는 자꾸 45% 쯤에서 오답처리가 됩니다 ㅜㅜ... 제 알고리즘에 어떤 문제가 있는 걸까요...
#include <iostream>
#include <vector>
using namespace std;
int N;
vector<int> R;
vector<int> G;
vector<int> B;
int dp[1001][3];
void Input()
{
cin >> N;
for(int i = 0; i < N; i++)
{
int r, g, b;
cin >> r >> g >> b;
R.push_back(r);
G.push_back(g);
B.push_back(b);
}
}
void DP()
{
dp[0][0] = R[0];
dp[0][1] = G[0];
dp[0][2] = B[0];
for (int idx = 1; idx < N; idx++)
{
for (int rgb = 0; rgb < 3; rgb++)
{
if (rgb == 0)
{
dp[idx][rgb] = min(dp[idx - 1][1], dp[idx - 1][2]) + R[idx];
}
else if (rgb == 1)
{
dp[idx][rgb] = min(dp[idx - 1][0], dp[idx - 1][2]) + G[idx];
}
else if (rgb == 2)
{
dp[idx][rgb] = min(dp[idx - 1][0], dp[idx - 1][1]) + B[idx];
}
}
}
int minVal = INT16_MAX;
for (int i = 0; i < 3; i++)
{
if (dp[N - 1][i] < minVal)
{
minVal = dp[N - 1][i];
}
}
cout << minVal << endl;
}
void Solve()
{
DP();
}
int main()
{
Input();
Solve();
}
Answer 2
0
안녕하세요, 인프런 AI 인턴입니다.
남경태님, RGB 색칠하기 문제에 대해 질문해주셨네요. 코드 확인을 통해 몇 가지 점검할 사항을 언급해드리겠습니다:
초기값 설정:
dp[0][0],dp[0][1],dp[0][2]가 적절하게 초기화되어 있는지 확인해 보세요. 현재 코드에서는R,G,B백터의 첫 번째 값으로 초기화하고 있어서 문제는 없어 보입니다.범위 확인:
for (int idx = 1; idx < N; idx++)로 루프를 돌리고dp[idx - 1][...]를 참조하고 있기 때문에 인덱스 범위를 벗어나지 않도록 항상 주의해야 합니다. N이 충분히 크다면 이 부분이 문제가 되지는 않을 것입니다.출력 문제: 출력 시, 결과 값이
INT16_MAX로 초기화되어 있어 최솟값 결정 시 이보다 작은 값이 되는 방향으로 진행이 되고 있다면 논리상 큰 문제는 없어 보입니다.입력과 출력: 입출력 관련해서 C++에서는
scanf/printf등이cin/cout보다 실행 속도가 빠르므로 시간 제한에 걸릴 경우 입출력 방식을 변경하는 것도 고려해보세요.
혹 이 외에 문제 사례가 발생하는 경우 일부 특이한 입력 케이스에서 예외 상황이 발생할 수 있습니다. 예를 들어, 특정 N 값이나 각 R, G, B 값이 극단적인 경우에 대해 추가적인 테스트 케이스를 만들어 테스트해보시길 권장합니다.
추가적인 문제가 발생하거나 해결되지 않을 경우, 보다 세부적인 디버깅을 통해 문제를 확인할 필요가 있을 수 있습니다.
편의상, 이 자료에 명시된 ‘문의하기’를 통해 인프런 커뮤니티의 강사님께 직접 질문할 수 있으니, 필요 시 이용해보세요.
감사합니다.
dp[x]가 최대값이라고 확신할수 있는 이유
0
44
1
1090번 문제 질문
0
148
1
유니온파인드
0
111
1
투포인터 25:15 질문
1
127
1
#1090번 문제 반례가 궁금합니다.
0
145
1
예제코드 자바입니다
1
186
1
정수론 파트 #2247 문제에 대한 질문입니다!
0
101
0
코드 오류
0
185
1
2강 정수론 문제3 #1407 질문
0
126
0
이차원 배열 (int형)dp로 0 혹은 -1로 체크하는 방법 말고 boolean형 배열로 체크해서 바로 리턴해줄 수 없나요?
0
154
0
1717번 최적화
0
112
0
백준 22988 문제 질문
1
192
2
[Python] 백준 1090번 문제
1
223
3
강의자료에서
1
161
2
2503 문제 제한 조건 질문!
1
248
2
백준 22988 번 문제
1
191
1
추가 강의 순서
1
179
2
(*문제 풀이)1090 테스트케이스 1번 C++
1
219
2
정수론 약수 빠르게 구하기 질문
1
255
1
1090 문제의 2, 3번째 아이디어는 결국 같은거 아닌가요?
1
372
2
1090 문제 관련하여 맨해튼 거리 최솟값에 대해 질문 있습니다.
1
222
2
누적합 문제 3번 질문
1
214
2
기억 ( 누적합 ) 강의 11660 문제
1
162
2
14719
1
204
2

