CodingTest/Baekjoon

[baekjoon] 백준 2304번(파이썬): 창고 다각형

JunJangE 2022. 2. 12. 21:54

문제

 

1535번: 안녕

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

www.acmicpc.net

알고리즘

- 반복문을 통해 각 체력내에 얻을 수 있는 기쁨을 확인한다.

- 현재 체력으로 인사를 못한다면 현재 기쁨을 이전 기쁨으로 초기화한다.

- 현재 체력으로 인사를 할 수 있다면 더 큰 값으로 기쁨을 초기화한다.

코드

import sys

n = int(sys.stdin.readline())
hp = list(map(int, sys.stdin.readline().split()))
joy = list(map(int, sys.stdin.readline().split()))
dp = [[0 for _ in range(101)] for _ in range(n + 1)]

# 반복문을 통해 각 체력내에 얻을 수 있는 기쁨을 확인
for i in range(1, n + 1):
    for j in range(1, 101):
        # 현재 체력이 hp[i - 1]보다 작다면
        # 현재 기쁨을 이전 기쁨으로 초기화한다.
        if j < hp[i - 1]:
            dp[i][j] = dp[i - 1][j]

        # 현재 체력이 hp[i - 1]보다 크거나 같다면
        # 현재 기쁨을 갱신한다.
        else:
            dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - hp[i - 1]] + joy[i - 1])
print(dp[n][99])

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com