Skip to content

Commit

Permalink
[Gold V] Title: 퇴사 2, Time: 1684 ms, Memory: 98576 KB -BaekjoonHub
Browse files Browse the repository at this point in the history
  • Loading branch information
srlee056 committed May 9, 2024
1 parent e4b0862 commit 43d320f
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
85 changes: 85 additions & 0 deletions 백준/Gold/15486. 퇴사 2/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# [Gold V] 퇴사 2 - 15486

[문제 링크](https://www.acmicpc.net/problem/15486)

### 성능 요약

메모리: 98576 KB, 시간: 1684 ms

### 분류

다이나믹 프로그래밍

### 제출 일자

2024년 5월 9일 12:10:18

### 문제 설명

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

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

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

<p>각각의 상담은 상담을 완료하는데 걸리는 기간 T<sub>i</sub>와 상담을 했을 때 받을 수 있는 금액 P<sub>i</sub>로 이루어져 있다.</p>

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

<table class="table table-bordered">
<thead>
<tr>
<th> </th>
<th>1일</th>
<th>2일</th>
<th>3일</th>
<th>4일</th>
<th>5일</th>
<th>6일</th>
<th>7일</th>
</tr>
</thead>
<tbody>
<tr>
<th>T<sub>i</sub></th>
<td>3</td>
<td>5</td>
<td>1</td>
<td>1</td>
<td>2</td>
<td>4</td>
<td>2</td>
</tr>
<tr>
<th>P<sub>i</sub></th>
<td>10</td>
<td>20</td>
<td>10</td>
<td>20</td>
<td>15</td>
<td>40</td>
<td>200</td>
</tr>
</tbody>
</table>

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

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

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

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

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

### 입력

<p>첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다.</p>

<p>둘째 줄부터 N개의 줄에 T<sub>i</sub>와 P<sub>i</sub>가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ T<sub>i</sub> ≤ 50, 1 ≤ P<sub>i</sub> ≤ 1,000)</p>

### 출력

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

19 changes: 19 additions & 0 deletions 백준/Gold/15486. 퇴사 2/퇴사 2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import sys
from collections import defaultdict, deque


def main():
n = int(sys.stdin.readline().strip())

profits = [0 for _ in range(n + 1)]
for i in range(n):
t, p = map(int, sys.stdin.readline().split())
profits[i] = max(profits[i], profits[i - 1])
if i + t <= n:
profits[i + t] = max(profits[i + t], profits[i] + p)
# print(profits)
print(max(profits[-2:]))


if __name__ == "__main__":
main()

0 comments on commit 43d320f

Please sign in to comment.