본문 바로가기

알고리즘/백준 문제풀이

백준-14501(퇴사, python)

728x90

https://www.acmicpc.net/problem/14501

 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net

문제 접근

  • 주어진 기간동안 상담을 진행할때 벌어들일 수 있는 최대 수익을 구하는 문제
  • 주어진 범위 값이 크지 않아 재귀함수를 통해 모든 경우의 수를 전부 구함
  • 경우의 수를 구할 때 고려할점은 해당 날짜에 상담을 할 것인지 말 것인지를 결정하는 것

 

정답 코드

n = int(input())
ans = 0
consulting = []

def go(n, index, temp):
    if index == n:
        global ans
        if ans < temp:
            ans = temp
        return 
    if index > n:
        return 
    # 상담을 하는 경우
    go(n, index + consulting[index][0], temp + consulting[index][1])
    # 상담을 안하는 경우
    go(n, index+1, temp)



for i in range(n):
    t, p = map(int, input().split())
    consulting.append((t, p))

go(n, 0, 0)
print(ans)

이번 문제는 4달전쯤에 백준 강의를 들을 때 풀었던 문제...어느정도 기억나서 쉽게 풀었음

재귀함수 연습하기 좋은문제