inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

[5강 재귀] 3번 상담 문제 질문드립니다.

해결된 질문

253

한혜경

작성한 질문수 6

1

안녕하세요, 강의 너무 잘 듣고 있습니다.

5강 최적화 강의의 3번 상담이라는 문제를 푸는데, 제공해주신 답변과 제가 작성한 코드에 차이가 있어 질문드립니다.

 

[모범답안]

def recur(idx, result):
    global answer

    

    if idx > n:
        if idx > n+1: return
        answer = max(answer, result)
        return

    recur(idx + table[idx][0], result + table[idx][1])
    recur(idx + 1, result)


n = int(input())
table = [[] for _ in range(n+1)]
for i in range(n):
    a, b = map(int, input().split())
    table[i+1] = [a, b]

# print(table)

answer = 0

recur(1, 0)

print(answer)

[제가 작성한 코드]

# 14501
import sys
sys.stdin =  open('/Desktop/dev/BackJoon/5강_최적화/3_상담.txt','r')

input = sys.stdin.readline
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]

def recur(idx, price):
    global ans
    
    if idx >= N: # 배열의 마지막 인덱스를 지나가는 것은 무시
        return 
    if idx == N-1: # 배열의 마지막 인덱스
        ans = max(ans, price)    
        return
    
    recur(idx+arr[idx][0], price+arr[idx][1])
    recur(idx+1, price)

ans = 0
recur(0,0)
print(ans)

모범답안과 종료조건이 다른 것을 확인했습니다.

제가 생각했을 때, 배열의 마지막 인덱스 (N-1)에서도 하루 짜리 일을 할 수도 있기 때문에 recur를 한번 더 돌수 있고 그 다음 인덱스 N 시점에서 종료되어야 한다고 생각해서 코드를 작성했습니다.

혹시 제가 잘못 생각하고 있는 부분이 있을까요?

 

또한, 제공해주신 답변은

  1. table을 N+1의 길이로 생성

  2. recur(1,0)로 시작

하고 있는데 해당 문제는 꼭 이렇게 접근해야 되는 것인가요?

 

미리 감사드립니다.

python 코딩-테스트 알고리즘

답변 1

0

코딩 센세

아뇨! 완벽하게 이해하신 것 같습니다 ㅎㅎ

 

지금 출근길이라 모바일 환경에서 답변을 드리는데

 

제가 강의에서 코드를 1부터 시작하는 이유는 1일차 2일차.. 로 언급되는 백준문제여서 쉬운 설명을 위해서 한거고,

 

당연히 인덱스는 0부터 계산하셔도 됩니다!

 

또한, 조건문을 바꿔서 계산해보려고 하시는 시도도 훌륭합니다 🙂

 

그런데, 제 조건문과 결과가 완전히 다르게 나올 것 같은데 반례도 확인하셨나요?

 

제 조건문은 ( 인덱스의 끝에 도달할때까지 나오는 모든 경우의 수의 정답을 비교한다. )

 

이지만 , 혜경님이 작성해주신 조건문은 ( 인덱스 마지막에서 계산되는 경우위 수의 정답을 비교한다. )

 

입니다.

 

이 부분에 대해서 한번 고민해 보시고, 오답이 될지 없다는 확신이 있으시면 조건문을 혜경님이 방식으로 써주면 됩니다.

 

하지만 제가 처음에 말씀드린 완전탐색적 사고방식으로는,

 

리소스( 시간과 메모리 )가 충분하다면 고민할 필요없이 컴퓨터에게 모든 경우의 수를 비교시키는게 더 쉬운 방법이라거 생각합니다 🙂

 

좋은 질문이네요! 감사합니다!

dp[x]가 최대값이라고 확신할수 있는 이유

0

44

1

1090번 문제 질문

0

150

1

유니온파인드

0

112

1

투포인터 25:15 질문

1

128

1

#1090번 문제 반례가 궁금합니다.

0

148

1

예제코드 자바입니다

1

186

1

정수론 파트 #2247 문제에 대한 질문입니다!

0

102

0

코드 오류

0

185

1

2강 정수론 문제3 #1407 질문

0

126

0

이차원 배열 (int형)dp로 0 혹은 -1로 체크하는 방법 말고 boolean형 배열로 체크해서 바로 리턴해줄 수 없나요?

0

154

0

1717번 최적화

0

112

0

백준 22988 문제 질문

1

193

2

[Python] 백준 1090번 문제

1

226

3

강의자료에서

1

162

2

2503 문제 제한 조건 질문!

1

249

2

백준 22988 번 문제

1

193

1

추가 강의 순서

1

180

2

(*문제 풀이)1090 테스트케이스 1번 C++

1

221

2

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

1

160

2

정수론 약수 빠르게 구하기 질문

1

257

1

1090 문제의 2, 3번째 아이디어는 결국 같은거 아닌가요?

1

373

2

1090 문제 관련하여 맨해튼 거리 최솟값에 대해 질문 있습니다.

1

223

2

누적합 문제 3번 질문

1

216

2

기억 ( 누적합 ) 강의 11660 문제

1

163

2