알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 안녕(1535)

HRuler 2023. 4. 19. 13:23

1. 문제

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

 

1535번: 안녕

첫째 줄에 사람의 수 N(≤ 20)이 들어온다. 둘째 줄에는 각각의 사람에게 인사를 할 때, 잃는 체력이 1번 사람부터 순서대로 들어오고, 셋째 줄에는 각각의 사람에게 인사를 할 때, 얻는 기쁨이 1번

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

# n : 병문안 온 사람 수
n = int(input())
# L : 각 사람들에게 인사할 때 잃는 체력 리스트
L = list(map(int, input().split()))
# J : 각 사람들에게 인사할 때 얻는 기쁨 리스트
J = list(map(int, input().split()))
# maxEnjoyLevel : 최대 기쁨 수치
maxEnjoyLevel = 0

def helloRecur(L, J, remainHealth, enjoyLevel):
    global maxEnjoyLevel
    for k, v in enumerate(L):
        if remainHealth - v <= 0:
            continue
        else:
            maxEnjoyLevel = max(maxEnjoyLevel, enjoyLevel + J[k])
            helloRecur(L[k+1:], J[k+1:], remainHealth - v, enjoyLevel + J[k])
            
helloRecur(L, J, 100, 0)

print(maxEnjoyLevel)

3. FeedBack

 - 재귀의 개념은 이해하고 있지만, 코드로 구현하는데 시간이 걸렸던 문제였다.

 재귀도 상황에 따라 다른 형태로 구현해야 하기 때문에 각 상황을 빠르고 확실하게 파악하여, 코드로 구현할 수 있어야 하겠다.