inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

84. 휴가(DFS활용)

질문 있습니다

157

전지환

작성한 질문수 3

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);
        }
    }
}

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

 

 

 

c++ 코딩-테스트

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 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 함수 내 조건 및 재귀 호출 부분: 조건 수정과 인덱스 접근 방식 수정

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

87번 채점 프로그램에 오류가 있는 것 같습니다.

0

89

2

그리디 파트

0

115

2

안녕하세요. 선생님(54번 코드 관련 문의)

0

141

2

테스트 파일 exit_coe_1, time_limit_exceeded 질문

0

143

1

C언어로 코드를 짜면 채점 시에 한 문제 빼고 시간 초과가 발생하는데 해결하는 방법이 있을까요?

0

172

1

19번 질문있습니다

0

123

1

6번 관련 채점오류입니다

0

88

2

22번 문제는 C로 풀어주신 건가요 C++로 풀어주신 건가요?

0

166

2

dev C++ 콘솔창 바로 닫힘

0

245

1

최신화하기

0

171

1

채점이 안되요...

1

260

1

안녕하세요 강사님 정렬에 대해서 설명이 조금 더 듣고 싶습니다.

0

113

1

45번 공주구하기 문제를 list를 이용해서 이렇게 풀어도 될까요?

0

155

1

39번 두 배열 합치기 문제 채점 오류인가 코드 오류인가

0

155

0

채점기에서 틀렸다고 나오는데 이유를 모르겠습니다.

0

149

2

해당 강의에서 C언어로만 진행하는 강의 문의 건

0

145

2

87번 문제 섬나라 아일랜드 질문

0

128

1

16번 문제에서 직접 답을 대입하면 정답이 나오는데 채점에서 wrong answer가 나옵니다.

0

149

1

40번 교집합 문제

0

166

1

43번 뮤직비디오 문제 테스트케이스 4번을 만족 못합니다.

0

170

1

41. 연속된 자연수의 합 문제 질문있습니다.

0

165

1

질문있습니다.

0

193

2

시간초과가 나요

0

172

1

43번 문제 3 ~ 5번에 문제가 있는것 같습니다.

0

247

1