[DFS][상태트리] - 휴가(삼성 SW역량평가 기출문제 : DFS활용)

yeom yaloo·2022년 7월 25일
0

codingtest

목록 보기
1/4

풀이

def DFS(L, money, day):
    global res
    if day > n:
        return
    if day == n:
        if res < money:
            res = money
    else:
        DFS(L+1, money + schedule[day][1], day + schedule[day][0])
        DFS(L+1, money, day+1)



if __name__ =="__main__":
    n = int(input())
    schedule = []
    for _ in range(n):
        a, b = map(int,input().split())
        schedule.append([a,b])
    res = -2147000000
    DFS(0,0,0)
    print(res)

설명

  • schedule.append([a,b]) - schedule[변수][0] = 해당 작업에 걸리는 날짜, [1]번째에는 해당 작업에 대한 보상이 담겨져 있다.
  • DFS를 사용해서 상태트리의 누적 작업을 진행한다.
  • if day > n: - 해당 상황을 return 해서 함수를 종료시킨다.
    당연하게도 주어진 날짜보다 작업을 진행하는 날짜가 더 길면 안 된다.
  • if day == n: - 해당 작업이 주어진 날짜에 달했다면 조건을 확인해준다. 지금까지 더해온 휴가비가 그전에 조건에 부합해서 누적했던 휴가비보다 많다면 res = money 휴가비의 최대 금액을 현재 누적액으로 바꿔준다.
  • 종료 조건에 만족하지 않는다면 DFS를 통해 계속 진행한다.
    이때 날짜는 계속해서 확인해주어야 하기에 +1 해준다.
    또한 상태트리로 다음 값을 더해주고 더하지 않고 하는 방식을 사용해 제일 만족하는 값을 찾아간다.
profile
즐겁고 괴로운 개발😎

0개의 댓글