꾸준하게 거북이처럼

휴가 - 삼성 SW 역량 테스트 문제 본문

Algorithm 문제 & 공부/DFS

휴가 - 삼성 SW 역량 테스트 문제

somm12 2022. 6. 25. 13:30

def DFS(L,sum):
    global res
    if L > n:
        if res < sum:
            res = sum
    else:
        DFS(L + Ti[L], sum + Pi[L])
        DFS(L+1,sum)

if __name__ == "__main__":
    res = 0
    n = int(input())
    Ti = [0]
    Pi = [0]
    for _ in range(n):
        t, p = map(int,input().split())
        Ti.append(t)
        Pi.append(p)
    DFS(1,0)
    print(res)

# 최대 점수구하기 문제처럼, 어떤날에 상담을 하느냐 안하느냐가 포인트이다. 만약 1일째 상담을 하면 5일째부터
# 상담을 할 수 있고 만약 5일째 상담을 안한다면 6일째 상담으로 넘어가는 것이다. 역시 이 문제도 부분집합 문제를
# 활용해서 문제를 풀 수 있다. 대신 상담을 하면
# 현재 상담일(레벨) + 상담기간 => L +Ti[L] 로 업데이트 된다.
# 상담하지 않을 시, 다음으로 넘어가니 L+1로 재귀호출.
# 매개변수 L을 상담일자 기간의 합으로 두어서 sum도 sum + Pi[L]로 업데이트를 한다.

# 지금까지 배웠던 것을 회상하면서, 어떤 식으로 문제를 풀 수 있을지 그림을 그린다.
# 그대로 코드로 정확하게 쓴다.
# 에디터에 옮겨쓰고 테스트 해보자.

 

먼가 거의 다풀어갔는데 너무 복잡하게 생각해버렸다.. ㅠㅜ 간단하게 풀 수 있다는 것에 좌절연속ㅋㅋ 괜찮아!

코드 작성하는데까지 1시간을 잡고 문제를 읽고 기본 로직을 생각한다. 천천히 그림을 그려가면서 문제를 풀어보자. 손코딩을 정확하게 써보자. 그 다음 에디터에 옮겨서 테스트를 해보자!!

 

'Algorithm 문제 & 공부 > DFS' 카테고리의 다른 글

동전바꿔주기  (0) 2022.06.27
양쪽저울문제  (0) 2022.06.26
DFS활용 - 최대점수 구하기  (0) 2022.06.25
경로탐색  (0) 2022.06.24
라이브러리를 이용한 순열 추측  (0) 2022.06.23
Comments