From 62689ce45ddc81324804df905ea62a6caec97ae3 Mon Sep 17 00:00:00 2001 From: Jeong SeYoung <65009713+JSY8869@users.noreply.github.com> Date: Thu, 4 Nov 2021 22:44:31 +0900 Subject: [PATCH 1/3] =?UTF-8?q?16-3=20=ED=87=B4=EC=82=AC=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CodingTest16_3.py" | 37 +++++++++++++++ .../\354\213\244\354\240\204 16-3/README.md" | 33 ++++++++++++++ .../\354\213\244\354\240\204 16-3/input.txt" | 45 +++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 "JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/CodingTest16_3.py" create mode 100644 "JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/README.md" create mode 100644 "JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/input.txt" diff --git "a/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/CodingTest16_3.py" "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/CodingTest16_3.py" new file mode 100644 index 0000000..6111dce --- /dev/null +++ "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/CodingTest16_3.py" @@ -0,0 +1,37 @@ +def main(N, TiPi): + Ti = [] + Pi = [] + for i in range(len(TiPi)): + Ti.append(int(TiPi[i][0])) + Pi.append(int(TiPi[i][1])) + d = [0 for _ in range(N+1)] + for i in range(N-1, -1, -1): + if i + Ti[i] > N: + d[i] = d[i+1] + else: + d[i] = max(d[i+1], Pi[i] + d[i + Ti[i]]) + + return d[0] + + + +# TEST + +file = open("CHAPTER 16/실전 16-3/input.txt", "r") +result = [] +N = [] +for i in range(4): + TiPi = [] + line = int(file.readline().strip()) + N.append(line) + for _ in range(line): + TiPi.append(file.readline().strip().split()) + result.append(int(file.readline().strip())) + + if int(main(N[i], TiPi)) == result[i]: + print("O") + else: + print("X") + break + +file.close() \ No newline at end of file diff --git "a/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/README.md" "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/README.md" new file mode 100644 index 0000000..8b35ab2 --- /dev/null +++ "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/README.md" @@ -0,0 +1,33 @@ +# 16-3 퇴사 +## 문제 설명 +상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. + +오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. + +백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다. + +각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다. + +N = 7인 경우에 다음과 같은 상담 일정표를 보자. + +| |1일|2일|3일|4일|5일|6일|7일| +|---|---|---|---|---|---|---|---| +|Ti|3|5|1|1|2|4|2| +|Pi|10|20|10|20|15|40|200| + +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/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/input.txt" "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/input.txt" new file mode 100644 index 0000000..513f92f --- /dev/null +++ "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-3/input.txt" @@ -0,0 +1,45 @@ +7 +3 10 +5 20 +1 10 +1 20 +2 15 +4 40 +2 200 +45 +10 +1 1 +1 2 +1 3 +1 4 +1 5 +1 6 +1 7 +1 8 +1 9 +1 10 +55 +10 +5 10 +5 9 +5 8 +5 7 +5 6 +5 10 +5 9 +5 8 +5 7 +5 6 +20 +10 +5 50 +4 40 +3 30 +2 20 +1 10 +1 10 +2 20 +3 30 +4 40 +5 50 +90 \ No newline at end of file From c6337351e3fd513a9f0080424f7ef0da3174fa36 Mon Sep 17 00:00:00 2001 From: Jeong SeYoung <65009713+JSY8869@users.noreply.github.com> Date: Mon, 8 Nov 2021 01:33:06 +0900 Subject: [PATCH 2/3] =?UTF-8?q?16-4=20=EB=B3=91=EC=82=AC=20=EB=B0=B0?= =?UTF-8?q?=EC=B9=98=ED=95=98=EA=B8=B0=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CodingTest16_4.py" | 24 +++++++++++++++++ .../\354\213\244\354\240\204 16-4/README.md" | 26 +++++++++++++++++++ .../\354\213\244\354\240\204 16-4/input.txt" | 3 +++ 3 files changed, 53 insertions(+) create mode 100644 "JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/CodingTest16_4.py" create mode 100644 "JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/README.md" create mode 100644 "JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/input.txt" diff --git "a/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/CodingTest16_4.py" "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/CodingTest16_4.py" new file mode 100644 index 0000000..01d3d24 --- /dev/null +++ "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/CodingTest16_4.py" @@ -0,0 +1,24 @@ +def main(N,Combat_Power): + if int(Combat_Power[0]) > int(Combat_Power[1]): + for i in range(1, N-1): + if int(Combat_Power[i]) > int(Combat_Power[i+1]) and int(Combat_Power[i-1]) > int(Combat_Power[i]): + pass + else: + Combat_Power.remove(Combat_Power[i]) + return main(N-1, Combat_Power) + return N + + + +file = open("CHAPTER 16/실전 16-4/input.txt", "r") +Combat_Power = [] +N = int(file.readline().strip()) +Combat_Power = file.readline().strip().split() +result = int(file.readline().strip()) + +if N - int(main(N, Combat_Power)) == result: + print("O") +else: + print("X") + +file.close() \ No newline at end of file diff --git "a/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/README.md" "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/README.md" new file mode 100644 index 0000000..b093138 --- /dev/null +++ "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/README.md" @@ -0,0 +1,26 @@ +# 16-4 병사 배치하기 +N명의 병사가 무작위로 나열되어 있다. 각 병사는 특정한 값의 전투력을 보유하고 있으며, 병사를 배치할 때는 전투력이 높은 병사가 앞쪽에 오도록 내림차순으로 배치를 하고자 한다. 다시 말해 앞쪽에 있는 병사의 전투력이 항상 뒤쪽에 있는 병사보다 높아야 한다. + +또한 배치 과정에서는 특정한 위치에 있는 병사를 열외시키는 방법을 이용한다. 그러면서도 남아있는 병사의 수가 최대가 되도록 하고 싶다. + +예를 들어, N=7일 때 나열된 병사들의 전투력이 다음과 같다고 가정하자. + +|병사 번호|1|2|3|4|5|6|7| +|---|---|---|---|---|---|---|---| +|전투력|15|11|4|8|5|2|4| + +이 때 3번 병사와 6번 병사를 열외시키면, 다음과 같이 남아있는 병사의 수가 내림차순의 형태가 되며 5명이 된다. 이는 남아있는 병사의 수가 최대가 되도록 하는 방법이다. + +|병사 번호|1|2|4|5|7| +|---|---|---|---|---|---| +|전투력|15|11|8|5|4| + +병사에 대한 정보가 주어졌을 때, 남아있는 병사의 수가 최대가 되도록 하기 위해서 열외해야 하는 병사의 수를 출력하는 프로그램을 작성하시오. + +## 입력 +- 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 2,000) +- 둘째 줄에 각 병사의 전투력이 공백을 기준으로 구분되어 차례대로 주어진다. +- 각 병사의 전투력은 10,000,000보다 작거나 같은 자연수이다. + +## 출력 +- 첫째 줄에 남아있는 병사의 수가 최대가 되도록 하기 위해서 열외해야 하는 병사의 수를 출력한다. \ No newline at end of file diff --git "a/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/input.txt" "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/input.txt" new file mode 100644 index 0000000..0e2139c --- /dev/null +++ "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/input.txt" @@ -0,0 +1,3 @@ +7 +15 11 4 8 5 2 4 +2 \ No newline at end of file From 02fdb8072c2608d3ff1177eebabfa54cb7409289 Mon Sep 17 00:00:00 2001 From: Jeong SeYoung <65009713+JSY8869@users.noreply.github.com> Date: Tue, 9 Nov 2021 18:47:57 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EC=A1=B0=EA=B1=B4=EB=AC=B8=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 불필요한 조건 제거 --- .../\354\213\244\354\240\204 16-4/CodingTest16_4.py" | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git "a/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/CodingTest16_4.py" "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/CodingTest16_4.py" index 01d3d24..c666c72 100644 --- "a/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/CodingTest16_4.py" +++ "b/JSY8869/CHAPTER 16/\354\213\244\354\240\204 16-4/CodingTest16_4.py" @@ -1,11 +1,9 @@ def main(N,Combat_Power): if int(Combat_Power[0]) > int(Combat_Power[1]): for i in range(1, N-1): - if int(Combat_Power[i]) > int(Combat_Power[i+1]) and int(Combat_Power[i-1]) > int(Combat_Power[i]): - pass - else: + if int(Combat_Power[i]) < int(Combat_Power[i+1]) or int(Combat_Power[i-1]) < int(Combat_Power[i]): Combat_Power.remove(Combat_Power[i]) - return main(N-1, Combat_Power) + return main(N-1, Combat_Power) return N