From cf177d527e8dd93a75f74e55b2f5c4bc11b832e9 Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Fri, 28 Feb 2025 23:30:23 +0900 Subject: [PATCH] =?UTF-8?q?[Silver=20III]=20Title:=20=ED=87=B4=EC=82=AC,?= =?UTF-8?q?=20Time:=2036=20ms,=20Memory:=2034536=20KB=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Silver/14501. 퇴사/README.md | 85 +++++++++++++++++++++++++++++++ 백준/Silver/14501. 퇴사/퇴사.py | 24 +++++++++ 2 files changed, 109 insertions(+) create mode 100644 백준/Silver/14501. 퇴사/README.md create mode 100644 백준/Silver/14501. 퇴사/퇴사.py diff --git a/백준/Silver/14501. 퇴사/README.md b/백준/Silver/14501. 퇴사/README.md new file mode 100644 index 0000000..43a2c95 --- /dev/null +++ b/백준/Silver/14501. 퇴사/README.md @@ -0,0 +1,85 @@ +# [Silver III] 퇴사 - 14501 + +[문제 링크](https://www.acmicpc.net/problem/14501) + +### 성능 요약 + +메모리: 34536 KB, 시간: 36 ms + +### 분류 + +브루트포스 알고리즘, 다이나믹 프로그래밍 + +### 제출 일자 + +2025년 2월 28일 23:30:07 + +### 문제 설명 + +

상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다.

+ +

오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다.

+ +

백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다.

+ +

각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다.

+ +

N = 7인 경우에 다음과 같은 상담 일정표를 보자.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1일2일3일4일5일6일7일
Ti3511242
Pi102010201540200
+ +

1일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 잡혀있는 상담은 총 2일이 걸리며, 받을 수 있는 금액은 15이다.

+ +

상담을 하는데 필요한 기간은 1일보다 클 수 있기 때문에, 모든 상담을 할 수는 없다. 예를 들어서 1일에 상담을 하게 되면, 2일, 3일에 있는 상담은 할 수 없게 된다. 2일에 있는 상담을 하게 되면, 3, 4, 5, 6일에 잡혀있는 상담은 할 수 없다.

+ +

또한, N+1일째에는 회사에 없기 때문에, 6, 7일에 있는 상담을 할 수 없다.

+ +

퇴사 전에 할 수 있는 상담의 최대 이익은 1일, 4일, 5일에 있는 상담을 하는 것이며, 이때의 이익은 10+20+15=45이다.

+ +

상담을 적절히 했을 때, 백준이가 얻을 수 있는 최대 수익을 구하는 프로그램을 작성하시오.

+ +### 입력 + +

첫째 줄에 N (1 ≤ N ≤ 15)이 주어진다.

+ +

둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 5, 1 ≤ Pi ≤ 1,000)

+ +### 출력 + +

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

+ diff --git a/백준/Silver/14501. 퇴사/퇴사.py b/백준/Silver/14501. 퇴사/퇴사.py new file mode 100644 index 0000000..b5cabc3 --- /dev/null +++ b/백준/Silver/14501. 퇴사/퇴사.py @@ -0,0 +1,24 @@ +import sys +import math + +sys.setrecursionlimit(10**6) +input = sys.stdin.readline + +n = int(input()) +T=[0] * (n+1) +P=[0] * (n+1) +tot = [] +maxvalue = [0] * (n+2) + +for i in range(1, n+1): + T[i], P[i] = map(int, input().split()) + +for i in range(n, 0, -1): + if(i + T[i] > n+1): + maxvalue[i] = maxvalue[i+1] + else: + maxvalue[i] = max(maxvalue[i+T[i]]+P[i], maxvalue[i+1]) + +print(maxvalue[1]) + +