Cos Pro Python 1급 2차 01번 문제풀이

Contents of table:


Topic: 주식으로 최대 수익을 내세요

Review:


정답코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

class ComicBook():
:
cost = 500
day -= 2
if day > 0:
cost +=
return cost

class Novel():
:
cost = 1000
day -= 3
if day > 0:
cost +=
return cost

def solution(book_types, day):
books = []
for types in book_types:
if types == "comic":
books.append(ComicBook())
elif types == "novel":
books.append(Novel())
total_price = 0
for book in books:
total_price += book.get_rental_price(day)
return total_price


### **문제내용**

### **문제10**
지난 연속된 n일 동안의 주식 가격이 순서대로 들어있는 리스트가 있습니다. 이때, 다음 규칙에 따라 주식을 사고 팔았을 때의 최대 수익을 구하려 합니다.

* n일 동안 주식을 단 한 번 살 수 있습니다.
* n일 동안 주식을 단 한 번 팔 수 있습니다.
* 주식을 산 날에 바로 팔 수는 없으며, 최소 하루가 지나야 팔 수 있습니다.
* 적어도 한 번은 주식을 사야하며, 한 번은 팔아야 합니다.

주식을 팔 때는 반드시 이전에 주식을 샀어야 하며, 최대 수익은 양수가 아닐 수도 있습니다.

연속된 n 일 동안의 주식 가격이 순서대로 들어있는 리스트 prices가 매개변수로 주어질 때, 주식을 규칙에 맞게 한 번만 사고팔았을 때 얻을 수 있는 최대 수익을 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 코드가 올바르게 동작하지 않습니다. 주어진 코드에서 _**한 줄**_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정해주세요.

---
### **매개변수 설명**
연속된 n 일 동안의 주식 가격이 순서대로 들어있는 리스트 prices가 solution 함수의 매개변수로 주어집니다.
* prices의 길이는 2 이상 1,000,000 이하입니다.
* prices의 각 원소는 1 이상 1,000 이하의 자연수입니다.

---
#####return 값 설명
주식을 규칙에 맞게 한 번만 사고팔았을 때 얻을 수 있는 최대 수익을 return 해주세요.

---
### **예시**

| prices    | return    |
|---------  |--------   |
| [1,2,3]   | 2         |
| [3,1]     | -2        |

### **예시 설명**

예시 #1
연속된 3일의 주가가 차례로 [1, 2, 3] 이며, 첫째 날에 주식을 사서 셋째 날에 팔면 수익은 2이고, 이때가 최대입니다.

예시 #2
문제에서 설명한 것처럼 무조건 한 번은 매수하고, 한 번은 매도해야 합니다. 첫째 날에 매수하여 둘째 날에 매도하는 방법밖에 없기 때문에 수익은 -2, 즉 2만큼 손실을 보게 됩니다.



Cos Pro Python 1급 1차 09번 문제풀이

Contents of table:


Topic: 계단 게임

Review:
잘못된 한 줄 코드를 찾아서 수정하는 형태의 문제. 이런 경우는 대입으로 잘못된 코드를 찾아내는 것이 가장 빠르다.
A,B 가 비기는 케이스 ex) (0,0) 일 때, cnt -=1 이 되면은 안되므로 max(0, cnt-1) 로 고쳐준다.


정답코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def func(record):
if record == 0:
return 1
elif record == 1:
return 2
return 0

def solution(recordA, recordB):
cnt = 0
for i in range(len(recordA)):
if recordA[i] == recordB[i]:
continue
elif recordA[i] == func(recordB[i]):
cnt += 3
else:
cnt = max(0, cnt - 1)
return cnt

문제내용

#문제9
두 학생 A와 B는 계단 게임을 하였습니다.
계단 게임의 규칙은 아래와 같습니다.

  1. 계단 제일 아래에서 게임을 시작합니다. (0번째 칸)
  2. 가위바위보를 합니다.
  3. 이기면 계단 세 칸을 올라가고, 지면 한 칸을 내려가고, 비기면 제자리에 있습니다.
  4. 계단 제일 아래에서 지면 제자리에 있습니다.
  5. 2~4 과정을 열 번 반복합니다.

A와 B가 계단 게임을 완료한 후에, A가 계단 위 몇 번째 칸에 있는지 파악하려고 합니다.

A와 B가 낸 가위바위보 기록이 순서대로 들어있는 리스트 recordA와 recordB가 매개변수로 주어질 때, 게임을 마친 후의 A의 위치를 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _한 줄_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

매개변수 설명

A와 B가 낸 가위바위보 기록이 순서대로 들어있는 리스트 recordA와 recordB가 매개변수로 주어집니다.

  • recordA와 recordB의 원소는 0, 1, 2중 하나이고 순서대로 가위, 바위, 보를 의미합니다.
  • recordA와 recordB의 길이는 10입니다.

return 값 설명

solution 함수는 계단 게임을 마친 후에 A가 계단 위 몇 번째 칸에 위치하는지를 return 합니다.

  • 계단 제일 아래 칸은 0번째 칸입니다.

예시

recordA recordB return
[2,0,0,0,0,0,1,1,0,0] [0,0,0,0,2,2,0,2,2,2] 14

예시 설명

recordA 가위 가위 가위 가위 가위 바위 바위 가위 가위
recordB 가위 가위 가위 가위 가위
result 0 0 0 0 +3 +6 +9 +8 +11 +14