하루일문
[백준] 1535번 안녕(파이썬) 본문
문제
1535번: 안녕
첫째 줄에 사람의 수 N(≤ 20)이 들어온다. 둘째 줄에는 각각의 사람에게 인사를 할 때, 잃는 체력이 1번 사람부터 순서대로 들어오고, 셋째 줄에는 각각의 사람에게 인사를 할 때, 얻는 기쁨이 1번
www.acmicpc.net
풀이
함수(내 풀이)
def pleasuer(l, j, i):
global L, J, joy
# 마지막인덱스에 도착했을때 들어간다
if i == n:
# joy보다 커졌을때 저장한다
if joy < j:
joy = j
# 마지막 인덱스라면 리턴한다
return
# 마지막 인덱스에 갈떄까지 재귀
pleasuer (l, j, i+1)
# 리턴 시 돌아온다 & 뒤에서부터 L[i]를 뺴도 0보다 크다면 들어간다/ 아님 풀린다.
if l - L[i] > 0:
pleasuer(l - L[i], j + J[i], i+1)
n = int(input())
L = list(map(int, input().split()))
J = list(map(int, input().split()))
l, j = 100, 0
joy =0
pleasuer(l, j, 0)
print(joy)
for문(블로그 참고)
n = int(input())
L = [0] + list(map(int, input().split()))
J = [0] + list(map(int, input().split()))
# 사람만큼의 이중리스트를 만들고 행복만큼 갯수를 넣는다
pleasure = [[0] * 101 for _ in range(n+1)]
# 사람만큼 돈다
for i in range(1, n+1):
# 행복만큼 돈다
for j in range(1, 101):
# 체력이 남아있다면 전 리스트의 최대행복과 전 리스르틔 전 최대행복 + 지금 얻는 행복 중 큰 수를 고른다
if j - L[i] > 0:
pleasure[i][j] = max(pleasure[i-1][j], pleasure[i-1][j-L[i]]+J[i])
# 안남는다면 전 수를 끌고 온다.
else:
pleasure[i][j] = pleasure[i-1][j]
print(pleasure[n][99])
아직까지 남의 풀이가 잘 이해가 가지 않는다...ㅠ
'algorithm > baekjoon' 카테고리의 다른 글
[백준] 별찍기 -3(파이썬) (0) | 2023.04.10 |
---|---|
[백준] 13777번 Hunt The Rabbit(파이썬) (1) | 2023.04.09 |
[백준] 2579번 계단 오르기(파이썬) (0) | 2023.04.07 |
[백준] 14501번 퇴사(파이썬) (0) | 2023.04.06 |
[백준] 1932번 정수 삼각형(파이썬) (0) | 2023.04.04 |