inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

7-I와 실수형연산의 한계

dp를 이차원 배열로 만들어서 풀어봤는데, 틀립니다.

해결된 질문

198

google_user

작성한 질문수 28

0

http://boj.kr/7c9fc1fdb4894c518c897537de03f02b

선생님, 안녕하세요~

dp를 이차원 배열로 만들어서 n번째 인덱스까지 돈m을 썼을때의 최대 칼로리 양을 저장하게 했습니다.

 

int dp[5004][10004]; // n번째 인덱스까지 돈m을 썼을때 최대 칼로리양

그 후 나머지 부분은, 동전문제에서 했던 것과 비슷하게,

단지 이차원 배열이니깐 dp[i][j]를 비교할 때, 가격이 이전 인덱스가 더 큰지, 아니면 이번 인덱스에서 가격만큼을 빼고 칼로리만큼을 더한게 더 큰지 비교해주도록 했는데요.

for (int i = 1; i <= n; i++)
        {
            for (int j = 1 * 100; j <= m * 100; j++)
            {
                if (price[i] > j)
                {
                    dp[i][j] = dp[i - 1][j];
                }
                else
                {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - price[i]] + cal[i]);
                }
                mx = max(mx, dp[i][j]);
            }
        }

지금 제가 생각하기에, 코드를 이렇게 짰을때, 일차원배열과 이차원배열이 큰 차이가 있나 싶기도하고, 다른 냅색문제에서 이렇게해서 통과하는 경우가 있었기에,

어떤 차이가 있을까, 반례가 뭐가있을까 질문드리고 싶습니다.

c++ 코딩-테스트

답변 1

1

큰돌

안녕하세요 google님 ㅎㅎ

dp를 이차원 배열로 만들어서 n번째 인덱스까지 돈m을 썼을때의 최대 칼로리 양을 저장하게 했습니다.

>>

무슨 코드인지 이해했습니다. 괜찮은 로직입니다. ㅎㅎ

 

#include <bits/stdc++.h>
using namespace std;

int n, c;
double m, p;
int dp[5004][10004];  
int cal[5004];
int price[5004];
int m1, m2;
int main() { 
    while (true) { 
        scanf("%d %d.%d", &n, &m1, &m2); 
        int max_price = m1 * 100 + m2; 
        if (n == 0) {
            break;
        } 

        for (int i = 1; i <= n; i++) {
            scanf("%d %d.%d", &c, &m1, &m2); 
            cal[i] = c;
            price[i] =  m1 * 100 + m2;
        }

        int mx = 0; 

        for (int i = 1; i <= n; i++) {
            for (int j = 0; j <= max_price; j++) {

                if (price[i] > j)
                {
                    dp[i][j] = dp[i - 1][j];
                }
                else
                {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - price[i]] + cal[i]);
                }
                mx = max(mx, dp[i][j]);
            }
        }
        printf("%d\n", mx); 
    }

    return 0;
}

다만 이렇게 해야 되지 않을까요?

 

 


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림. 

채점서버 연결 관련 질문입니다

0

23

1

삼성 s직군

0

23

0

삼성 코테 없어짐

0

73

1

코딩살구클럽 가입부탁드립니다

0

39

2

코딩살구클럽 가입 요청 확인부탁드립니다

0

34

2

5-S 테스트 케이스 질문

0

37

2

코살 문제풀이 환경

0

53

2

2 - T 오큰수 문제가 있는 것 같습니다.

0

45

1

추천 추가문제들

0

44

2

프로그래머스 코테 환경 관련해서 질문드립니다.

0

50

2

해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.

0

44

2

균형 이진 트리 설명 시 높이 숫자

0

33

2

4-H 질문드립니다.

0

37

2

1-K 질문드립니다.

0

43

2

대기업 인적성 시험 질문

0

43

2

4-C 질문드립니다

0

43

2

[수학숙제 / BOJ 2870] 채점 서버 오작동

0

40

1

코테 준비 질문

0

56

1

살구클럽가입 요청드려요

0

42

2

1-I 문제 질문

0

46

2

코딩살구클럽 가입

0

60

2

AI 코딩 도구 사용 시 학습 방법 조언

0

56

2

코딩살구클럽 오류

0

66

2

코살클 [3-F 괄호 추가하기] 프라이빗 9번 제보

0

51

1