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

전지환님의 프로필 이미지
전지환

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

84. 휴가(DFS활용)

질문 있습니다

작성

·

120

0

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


int n;
int maximum=-2147000000;
vector<pair<int, int>> A;
void DFS(int day, int now_day, int income);

int main(){
    cin >> n;
    for(int i=1; i<=n; i++){
        int a, b;
        cin >> a >> b;
        A.push_back(make_pair(a, b));
    }
    
    for(int i=1; i<=A.size(); i++){
        DFS(A[i].first, i, 0);
    }
    cout << maximum;
}

void DFS(int day, int now_day, int income){
    if(day>n){
        if(income>maximum) maximum=income;
        return;
    }
    else if(day==n){
        income+=A[now_day].second;
        if(income>maximum) maximum=income;
        return;
    }
    else{
        income+=A[now_day].second;
        for(int i=day+1; i<=n; i++){
            DFS(day+A[i].first, i, income);
        }
    }
}

해당 코드로는 알맞는 정답이 출력되지 않는데, 그 이유를 모르겠습니ㅏㄷ.

 

 

 

답변 1

0

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

해당 코드의 주요 문제는 DFS 함수의 탐색 조건과 인덱스 관련 로직에 있습니다. 주어진 코드는 상담할 수 있는 날짜를 초과해서 탐색이 진행될 수 있으며, A 벡터의 인덱스 접근 방식에 오류가 있습니다.

  1. 벡터 A는 0부터 인덱싱이 시작되므로, main 함수에서 DFS를 호출할 때 i-1을 사용해야 합니다. 즉, DFS(A[i-1].first, i-1, 0);로 수정해야 합니다.

  2. DFS 함수의 첫 번째 if 조건문에서, day>n이 아니라 now_day+day > n으로 수정해야 합니다. 상담을 시작하는 날짜(now_day)와 상담을 완료하는데 걸리는 시간(day)을 합친 값이 n을 초과할 경우 탐색을 종료해야 하는데, 코드에서는 현재 날짜만 고려하고 있습니다.

  3. 또한, DFS 함수 내에서 다음 상담을 선택할 때 day+A[i].first 대신 day+A[i-1].first를 사용해야 합니다. 그리고 DFS 호출시, i 대신 i-1을 사용해야 합니다.

정리하면, 코드에서 주요 수정 사항은 다음과 같습니다:

  • main 함수에서 DFS 호출 부분: DFS(A[i-1].first, i-1, 0);
  • DFS 함수 내 조건 및 재귀 호출 부분: 조건 수정과 인덱스 접근 방식 수정

이러한 수정사항을 반영하면 코드가 올바르게 작동할 가능성이 높아집니다. 다만, 코드 전체의 취지를 고려해 필요한 추가 수정사항이 있을 수 있으니 참고하여 코드를 검토해 보시기 바랍니다.

전지환님의 프로필 이미지
전지환

작성한 질문수

질문하기