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

정재윤님의 프로필 이미지
정재윤

작성한 질문수

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

8-C

8-C 질문

작성

·

275

0

안녕하세요 강사님,

prev, cost, real_cost 부분이 잘 이해가 되지 않습니다... ㅜ

prev를 이전에 추가했을 친구수,

cost를 이번에 추가할 친구수로 생각하고,

real_cost가 진짜 추가한 친구수

라고 생각하면 될까요?

 

그래서 이전에 추가했을 친구수가 이번에 추가할 친구수보다 크거나 같다면, 이전에 이번보다 많은 친구를 추가했으니 더이상 추가할 필요가 없어서 0이 되는거고

작다면 새롭게 인원을 추가하면 되는 거로 생각했습니다.

 

이 부분이 잘 정리가 되지 않는거 같습니다 ㅜㅜ

부연 설명을 부탁드려도 될까요?

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 재윤님 ㅎㅎ

 

prev를 이전에 추가했을 친구수,

cost를 이번에 추가할 친구수로 생각하고,

real_cost가 진짜 추가한 친구수

라고 생각하면 될까요?

>> 네 맞습니다.

    int cost = max(0, t - v[here].second); 
    int real_cost = (prev >= cost) ? 0 : cost;  

cost는 지금 시점에서 필요한 친구수입니다.

근데 그 전에 prev로 이미 친구를 많이 추가했다면 0이 되는 것이죠. 지금 필요한 친구수가 8인데 10을 추가했다면 추가할 필요가 없겠죠?

    if(num - real_cost >= 0){
        return ret = max(go(here + 1, num - real_cost, cost)+ v[here].first, go(here + 1, num, 0));
    }else return ret = go(here + 1, num, 0); 

그걸 기반으로 만약 지금 추가가 가능한 num이 남아있다면 추가하던가, 추가하지 않던가의 경우의 수를 기반으로 함수를 호출합니다.

num이 남아있지 않다면 추가를 못하는 경우의 수만이 존재하기 때문에 해당 함수만을 호출하는 것이죠.

 

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

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

감사합니다.

강사 큰돌 올림.

정재윤님의 프로필 이미지
정재윤

작성한 질문수

질문하기