소스 코드

def dfs(idx,temp_res):
    global res
    
    # 탈출조건 1
    # 마지막 날까지 일한 경우
    if idx == N+1:
        if temp_res > res:
            res = temp_res
        return

    for w in range(idx,N+1):
        
        # 범위를 N+1로 정한 이유는 마지막 날에 1일짜리 상담을 받을 수 있기 때문
        if w+calendar[w][0] <= N+1:
            dfs(w+calendar[w][0],temp_res+calendar[w][1])

    # 탈출조건 2
    if temp_res > res:
        res = temp_res

    return

# N일
N = int(input())

# 달력
calendar = [list(map(int,input().split())) for _ in range(N)]

# 숫자 맞추기 위해 0의 위치에 임의의 값 추가
calendar.insert(0,[0])

# 최대 값
res = 0

for q in range(1,N+1):
    
    # 범위 조건 맞는 경우만 함수 작동
    if q + calendar[q][0] <= N+1:
        dfs(calendar[q][0]+q,calendar[q][1])

print(res)

 


해결 방법

1. 마지막 날에 1일짜리 상담을 할 수 있는 경우를 고려한 코드를 작성해야 함


느낀 점

최근 한동안 문제를 풀 시간이 없었는데, 나같은 초보자는 아무리 짧은 기간이라도 문제를 꾸준히 푸는 것이 무조건 옳다는 사실을 느낌

 

크게 어려운 문제 아니었으나 집중이 잘 안되서 생각보다 긴 시간이 소요되었기 때문

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.