BOJ 25965 - 미션 도네이션 (Python3)
이 문제는 2022 Goricon A번 문제 되시겠다.
처음으로 참가한 대회에서 처음으로 푼 문제라 여러모로 감명이 깊다. 비록 브론즈 3의 쉬운 난이도라고 해도 말이다.
파이썬의 기본을 종합 테스트하는 문제라고 개인적으로 생각한다. 반복문과 사칙연산을 잊지 않았는가, 어떻게 현상을 코드로 옮길 것인가... 등등.
그럼 본격적으로 풀이에 돌입해 보자.
문제
리그오브전설 스트리머 순범이는 트위치 플랫폼으로 시청자를 끌어모으고 있다. 순범이는 '트윕' 음성 도네이션을 통해 시청자들과 소통하고는 한다.
순범이는 트윕에 '미션' 기능이 있다는 것을 알고, 자신의 리그오브전설 실력을 활용해 매 게임마다 미션 기능으로 돈을 끌어모으려고 한다.
미션 기능을 이용하는 시청자가 너무 많을 때도 있어서 순범이는 게임이 끝난 후 자신이 미션으로 받을 수 있는 총 도네이션 금액이 얼마인지를 구하는 계산 프로그램을 작성하고자 한다.
각 게임들은 여러 개의 미션으로 이루어져 있으며, 각 미션들은 킬당 K원 추가, 데스당 D원 차감, 어시스트당 A원 추가의 형식으로 주어진다.
만약 어떤 미션의 계산 금액이 0보다 작은 경우에는 총 금액에 이를 합산하지 않는다. 각 게임을 새로 시작할 때에는 도네이션 금액은 0부터 시작한다.
순범이가 각 게임을 마칠 때마다 받게 되는 총 도네이션 금액을 구해보자.
입력
첫 줄에 총 게임의 수 N이 주어진다. (1 ≤ N ≤ 50)
각 게임마다 첫 줄에 총 미션의 수 M이 주어지며, M개의 줄에 거쳐 각 미션의 내용이 주어진다. (1 ≤ M ≤ 100)
각 미션들은 킬당 추가해야 하는 금액 K, 데스당 차감해야 하는 금액 D, 어시스트당 추가해야 하는 금액 A가 공백으로 구분되어 주어진다. (1,000 ≤ K, D, A ≤ \(5 \times 10^7\))
각 게임당 마지막 줄에 게임이 종료된 후 순범이의 킬 k, 데스 d, 어시스트 a가 공백으로 구분해 주어진다. (0 ≤ k,d,a ≤ 50)
예제 입력)
# 예제 입력 1
2
2
1000 2000 3000
1000 4000 1000
4 1 2
1
4000 3000 2000
2 4 2
# 예제 입력 2
1
3
9146 6114 4301
7587 5074 9944
3175 9794 3119
1 5 5
# 예제 입력 3
3
4
13239 13091 11619
10431 6300 10235
14340 8606 9048
12777 10975 14396
8 2 0
3
8937 9151 1868
13650 2597 1531
13746 6384 11839
4 0 9
2
3934 5773 8056
11015 5695 9285
13 6 14
출력
각 게임마다 순범이가 받는 총 도네이션 금액을 순서대로 한 줄씩 출력한다.
예제 출력)
# 예제 출력 1
10000
0
# 예제 출력 2
32018
# 예제 출력 3
328352
282474
368303
내 코드
for _ in range(int(input())):
missions, games, dona = [], int(input()), 0
for i in range(games):
missions.append(list(map(int, input().split())))
k,d,a = map(int, input().split())
for i in range(games):
take = k*missions[i][0]-d*missions[i][1]+a*missions[i][2]
dona += max(0, take)
print(dona)
첫 번째 for문 안에 있는 내용이 한 게임당 이루어져야 할 태스크라고 할 수 있겠다.
우선 미션들을 모두 입력받아서 [K, D, A] 꼴의 배열들로 저장을 한 다음, 게임이 끝나고 나서 뚜껑을 연 다음 매번 0과 계산값 중 더 큰 값을 도네이션 금액에 더해 줄 것이다.
그리고 반복문이 전부 돌아가면 도네이션 받은 금액을 전부 뱉으면 끝.
그런데 2킬 4뎃 2어시라면 처참한 경기력을 보여줬으니 돈을 내야 옳지 않을까?
이로서 25965번의 풀이를 마친다.