인프런 커뮤니티 질문&답변

남경태님의 프로필 이미지
남경태

작성한 질문수

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

7강 RGB 색칠하기 질문 있습니다.

작성

·

33

0

// 아래 풀이법에서 제시해주신 풀이법과 비슷하게 풀이한 것 같으나 백준에서는 자꾸 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();
}

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

남경태님, RGB 색칠하기 문제에 대해 질문해주셨네요. 코드 확인을 통해 몇 가지 점검할 사항을 언급해드리겠습니다:

  1. 초기값 설정: dp[0][0], dp[0][1], dp[0][2] 가 적절하게 초기화되어 있는지 확인해 보세요. 현재 코드에서는 R, G, B 백터의 첫 번째 값으로 초기화하고 있어서 문제는 없어 보입니다.

  2. 범위 확인: for (int idx = 1; idx < N; idx++)로 루프를 돌리고 dp[idx - 1][...]를 참조하고 있기 때문에 인덱스 범위를 벗어나지 않도록 항상 주의해야 합니다. N이 충분히 크다면 이 부분이 문제가 되지는 않을 것입니다.

  3. 출력 문제: 출력 시, 결과 값이 INT16_MAX로 초기화되어 있어 최솟값 결정 시 이보다 작은 값이 되는 방향으로 진행이 되고 있다면 논리상 큰 문제는 없어 보입니다.

  4. 입력과 출력: 입출력 관련해서 C++에서는 scanf/printf 등이 cin/cout보다 실행 속도가 빠르므로 시간 제한에 걸릴 경우 입출력 방식을 변경하는 것도 고려해보세요.

혹 이 외에 문제 사례가 발생하는 경우 일부 특이한 입력 케이스에서 예외 상황이 발생할 수 있습니다. 예를 들어, 특정 N 값이나 각 R, G, B 값이 극단적인 경우에 대해 추가적인 테스트 케이스를 만들어 테스트해보시길 권장합니다.

추가적인 문제가 발생하거나 해결되지 않을 경우, 보다 세부적인 디버깅을 통해 문제를 확인할 필요가 있을 수 있습니다.

편의상, 이 자료에 명시된 ‘문의하기’를 통해 인프런 커뮤니티의 강사님께 직접 질문할 수 있으니, 필요 시 이용해보세요.

감사합니다.

남경태님의 프로필 이미지
남경태

작성한 질문수

질문하기