게임 개발
당신이 참여했던 RPG게임이 대박이 나서 당신과 당신의 회사는 새로운 게임을 개발하기로 했다.
여러 날의 회의 끝에 새로운 게임의 장르는 AOS(MOBA)로 현재 자신들의 RPG게임의 IP를 사용하기로 했다.
그렇게 몇 날 며칠을 토론을 하며 게임의 틀이 잡혀졌고 각고의 노력 끝에 게임을 출시했다.
반응은 좋았으나 다른 게임들에 있는 MVP시스템이 있었으면 좋겠다는 요청이 들어와
빠져나가기 쉬운 유저들을 붙잡아두기 위해선 유저들의 요구를 하루빨리 들어주어야 했고
그 결과 실력이 가장 좋은 당신이 프로그래밍을 맡게되었다.
최대한 빠른 시일 내에, MVP를 출력하는 프로그램을 작성하시오.
조건
한 게임의 유저는 총 열명으로 두팀으로 나뉜다. (A1,A2...A5 와 B1,B2...B5로 구성된다.)
총 10줄에 걸쳐 각 유저들의 K/D/A를 입력받고 그에 따른 점수가 가장 높은 유저를 출력한다.
점수는 (K * 2 + A )/ (D+1) 이며 소수점 셋째 자리에서 반올림한다.
만약 같은 팀인데 점수가 똑같다면 점수가 똑같은 사람중에 어느 누구를 출력해도 상관이 없다.
오류가 있는 데이터는 존재하지 않는다. 즉, 데이터로는 더블킬인데 킬은 2킬보다 적은 경우는 주어지지 않는다.
데이터는 순서대로 주어지며 언제나 위쪽에 있는 데이터 5줄이 승자다.
1차 업데이트
이 게임도 성공을 하고 운영을 하던 도중 또 MVP시스템을 수정해달라는 글이 여럿 올라왔었다.
바로 연속으로 상대를 처치한 그 업적을 인정해주지 않는다는 것이었다.
그리고 자신의 팀이 이겼고 상대와 내가 점수가 똑같은데 왜 상대가 MVP냐는 글도 여럿 있었다.
그 글들을 취합해 당신은 또 다시 MVP시스템을 업그레이드 하게 되었다.
업데이트 항목 : 연속으로 상대를 처치함에 따라 점수를 더하고 승리한 팀에게 모두 1점을 더하시오.
펜타킬 : P : 4
쿼드라킬 : Q : 3
트리플킬 : T : 2
더블킬 : D : 1
없음 : N : 0
입력
3/0/4 D
2/5/6 N
12/4/2 P
1/2/8 N
2/2/8 N
5/5/2 T
1/5/2 N
1/3/1 N
2/4/5 N
4/3/5 Q
출력
A1
A1 = 12.0, A2 = 2.67, A3 = 10.2, A4 = 4.33, A5 = 5.0,
B1 = 4.0, B2 = 0.67, B3 = 0.75, B4 = 1.8, B5 = 6.25
가장 점수가 큰 A1이 MVP이다.
2021.3.8 오류 수정 완료
33개의 풀이가 있습니다.
본 문제는 입력데이터([플레이어 이름], [KDA], [플레이 경과 시간] 등)에 따라 코드가 바뀔 것 같습니다. 업데이트 내용은 단순히 연속킬과 승리 점수를 총합에 추가하는 것이므로 따로 코딩하지 않았습니다. (만약, 플레이 타임에 따른 연속킬 과정까지 표현한다면 함수를 추가하면 될 것 같습니다.)
풀이는 pandas를 사용하였으니 해당 Library가 필요합니다.
해당 문제는 점수를 계산하여 가장 큰 값을 구하는 문제입니다. 엑셀로도 간단히 풀 수 있으나 Pandas를 이용하여 코딩해보았습니다.
먼저, 계산에 필요한 Player 데이터를 받습니다. 데이터 입력과정을 추가할 수 있으나 고정 데이터를 사용하여 Dataframe을 만들겠습니다.
import pandas as pd
PlayerName = ['A1','A2','A3','A4','A5','B1','B2','B3','B4','B5']
KDA = ['1/6/3','5/6/2','4/1/4','6/3/2','4/5/7','4/3/2','1/4/6','5/1/4','6/4/1','4/5/1']
PlayerData = pd.DataFrame(KDA,PlayerName,['kda'])
여기서 업데이트에 들어간 Winner 데이터 열을 추가해도 됩니다. 다음으로 MVP를 찾기 위한 점수 계산 함수를 만들어보겠습니다.
# eval함수를 사용하여 따로 Type변환 없이 그대로 수식을 사용했습니다.
def CP(kda):
kda_str=kda.split('/')
CalculPoint = '('+kda_str[0]+'*2'+'+'+kda_str[1]+')'+'/'+kda_str[2]
return eval(CalculPoint)
만든 MVP점수 계산 함수를 Dataframe에 적용해보겠습니다.
CPData=pd.DataFrame(PlayerData['kda'].apply(CP)).rename(columns={'kda':'CP'}) #KDA 데이터에 함수 적용
pd.concat([PlayerData,CPData],axis=1) #적용된 데이터 붙여서 CP를 Dataframe으로 확인
이제 MVP를 출력하는 문구를 만들면 됩니다.
MVP=list(PlayerData[(CPData['CP']==max(CPData['CP']))].index)[0] #MVP 탐색
print ('POTG : '+ MVP)
CK = ['N','D','T','Q','P']
data = list(input().split() for x in range(10))
for x in range(10):
k = list(map(int,data[x][0].split('/')))
data[x] = round((k[0]*2+k[2])/(k[1]+1),2) + (1 if x < 5 else 0) + CK.index(data[x][1])
n = data.index(max(data))
print('MVP :' + ['A','B'][0 if n < 5 else 1] + str(n+1))
입력
3/0/4 D
2/5/6 N
12/4/2 P
1/2/8 N
2/2/8 N
5/5/2 T
1/5/2 N
1/3/1 N
2/4/5 N
4/3/5 Q
출력
A1
user={}
winner=0
for i in range(10):
#팀명지정
if i <5: name= 'a'+str(i+1)
else: name='b'+str(i-4)
#기존 MVP 시스템
temp=list(map(int,input(name+"의 KDA : ").split('/')))
user[name]=(temp[0]*2+temp[1])/temp[2]
#연속킬 계산
kill_temp = list(map(int,input(name+"의 P,Q,T,D : ").split(',')))
user[name]+=(kill_temp[0]*5+kill_temp[1]*4+kill_temp[2]*3+kill_temp[3]*2)
#승리팀 확인
if 'a'in name: winner+=user[name]
else: winner-=user[name]
for i in range(5):
if winner > 0: user['a'+str(i+1)]+=1
elif winner < 0: user['b'+str(i+1)]+=1
else: break
print("MVP : %s"%(max(user, key=user.get)))
KDA와 P,Q,T,D를 입력받는 양식으로 작성했습니다. 아직 초보라 코드가 지저분한부분이 있네요ㅠㅠ 지적해주시면 감사합니다.
inset = [
'1/6/3',
'5/6/2',
'4/1/4',
'6/3/2',
'4/5/7',
'4/3/2',
'1/4/6',
'5/1/4',
'6/4/1',
'4/5/1',
]
max_score = max_idx = i = 0
for item in inset:
chunks = item.split('/')
k, d, a = map(int, chunks)
score = (k * 2 + a * 1) / d
if max_score < score:
max_score = score
max_idx = i
i += 1
max_idx += 1
print('{}{}'.format('a' if max_idx < 5 else 'b', str(max_idx if max_idx < 5 else max_idx - 5)))
import math
a = []
b = []
for i in range(0, 5) :
a.append(i)
a[i] = input().split('/')
for i in range(0, 5) :
b.append(i)
b[i] = input().split('/')
a_list = list(map(lambda x:(int(x[0])*2 + int(x[2])*1)/int(x[1]), a))
b_list = list(map(lambda x:(int(x[0])*2 + int(x[2])*1)/int(x[1]), b))
a_max = float(max(list(map(lambda x:(int(x[0])*2 + int(x[2])*1)/int(x[1]), a))))
b_max = float(max(list(map(lambda x:(int(x[0])*2 + int(x[2])*1)/int(x[1]), b))))
if (a_max > b_max) :
print("max : a%s " % (a_list.index(a_max) + 1))
else :
print("max : b%s " % (b_list.index(b_max) + 1))
업데이트 내용은 하지 않았습니다. a따로 b따로 하려고 해서 list a,b 따로 했고 각각의 리스트와 max를 구했습니다.
i=1 mvp=0
while i <=10: a=input('enter K/D/A : ') l=a.split('/') K=int(l[0]) D=int(l[1]) A=int(l[2]) p=(K2+A1)/D
if p>mvp:
mvp=p
if i <6:
player='a'+str(i)
else:
player='b'+str(i-5)
i=i+1
print('MVP=',player)
import random
from copy import copy
#업데이트
kill_pt = {'P' : 5, 'Q' : 4, 'T' : 3, 'D' : 2, 'N' : 0}
kda = []
points = []
def kda_point(kda):
return (int(kda[0]) * 2 + int(kda[2])) / int(kda[1]) + float(kill_pt[kda[3]])
for i in range(10):
kda.append(list(input().split('/')))
for i in range(10):
points.append(kda_point(kda[i]))
win_point = random.randint(0,1)
if win_point:
for i in range(5):
points[i] += 1
else:
for i in range(5,10):
points[i] += 1
result = copy(points)
mvp = result.index(sorted(points)[9])
if mvp < 5:
print('A{}'.format(mvp + 1))
else:
print('B{}'.format(mvp - 4))
julia
function kdaParser()::Array{Int,2}
kda = Array{Int}(undef,10,3)
for i in 1:10
kda[i,:] .= (parse(Int,i) for i in split(readline(), "/"))
end
kda
end
function findMVP(score)
s,p = findmax(score)
println("MVP : ", p > 5 ? "b$(p-5)" : "a$p", " ($s)")
p
end
let # main
kdaTable = kdaParser()
score = [
let
k,d,a = kdaTable[i,:]
(2k + a)/d
end for i in 1:10 ]
findMVP(score)
end # main end
LOL=[i*0 for i in range(10)];M=0
for i in range(len(LOL)):
K,D,A=map(int,input("Kill / Death / Assist\n").split('/'))
if D==0:
if K==0 and A==0:
LOL[i]=0
else:
LOL[i]=-9999+K*2+A*1
else:
LOL[i]=(K+A)/D
##############1차 패치노트 적용###############
S,VD=map(str,input("Successive Kill Victory?Defeat\n(모노킬/노킬일경우, 뭐라도 좋으니 일단 입력)\n").split())
if S=='P' or S=='p':
LOL[i]+=5
elif S=='Q' or S=='q':
LOL[i]+=4
elif S=='T' or S=='t':
LOL[i]+=3
elif S=='D' or S=='d':
LOL[i]+=2
if VD=='V' or VD=='v':
LOL[i]+=1
M=max(LOL)+9999
print(M)
for i in range(len(LOL)):
if LOL[i]<0:
LOL[i]+=M
##################결과출력####################
print("\n\n\n\n최고의 플레이")
for i in range(len(LOL)):
if LOL[i]==max(LOL):
print("\t 불전건한소환사명{}".format(i+1))
print('\n\n\n탈주/자리비움 제재 대상자')
for i in range(len(LOL)):
if LOL[i]==0:
print("\t 불건전한소환사명{}".format(i+1))
1차패치노트 내용에 개인 커스텀 패치를 적용하여보았읍니다. ①단 한번도 죽지 않았을 경우, KDA 값이 무한대가 되기에 그들을 제외한 나머지 유저들내에서의 최고 KDA값에 각자의 킬수×2+어시스트수×1의 점수를 더하여 보정하였읍니다. ②최고득점자가 다수일 경우 모조리 출력하였읍니다. ③개인적으로 탈주자를 굉장히 싫어하기 때문에, 아무것도 하지 않은 채 K/D/A가 0/0/0인 경우, 따로 추려서 탈주/자리비움 제재를 받도록 하였읍니다.
#include <stdio.h>
int finalScore(void);
int max_score(int num1,int num2,int num3,int num4,int num5);
int max_number(int num1,int num2,int num3,int num4,int num5);
int compareTwo(int score1, int score2);
char compareTeam(int scoreA, int scoreB);
void main(){
int i;
int a[5];
int b[5];
int maxScoreA;
int maxScoreB;
char winnerTeam;
for(i=0;i<5;i++){
a[i]=finalScore();
}
for(i=0;i<5;i++){
b[i]=finalScore();
}
maxScoreA = max_score(a[0],a[1],a[2],a[3],a[4]);
maxScoreB = max_score(b[0],b[1],b[2],b[3],b[4]);
winnerTeam = compareTeam(maxScoreA, maxScoreB);
printf("%c",winnerTeam);
if(maxScoreA>maxScoreB){
printf("%d",max_number(a[0],a[1],a[2],a[3],a[4]));
}else
printf("%d",max_number(b[0],b[1],b[2],b[3],b[4]));
}
int finalScore(void){
int K, D, A;
scanf("%d/%d/%d",&K,&D,&A);
return (K*2+A*1)/D;
}
int max_score(int num1,int num2,int num3,int num4,int num5){
int result;
result = compareTwo(compareTwo(compareTwo(num1,num2),num3),compareTwo(num4,num5));
return result;
}
int max_number(int num1,int num2,int num3,int num4,int num5){
if(max_score(num1,num2,num3,num4,num5) == num1){
return 1;
}else if(max_score(num1,num2,num3,num4,num5) == num2){
return 2;
}else if(max_score(num1,num2,num3,num4,num5) == num3){
return 3;
}else if(max_score(num1,num2,num3,num4,num5) == num4){
return 4;
}else{
return 5;
}
}
int compareTwo(int score1, int score2){
if(score1>score2){
return score1;
}else{
return score2;
}
}
char compareTeam(int scoreA, int scoreB){
if(scoreA>scoreB){
return 'a';
}else{
return 'b';
}
}
def KPoint(K):
if K>=2 and K<=5: return K + sum(i for i in range(2, K+1))
else: return 0
def inputWKDA(win):
KDA=[0]
for i in range(1, 11):
K, D, A = map(int, input('>>>').split('/'))
KDA.append((K*2 + A*1)/D + KPoint(K))
if win == 'a':
for n in KDA[1:6]: n+=1
elif win == 'b':
for n in KDA[6:11]: n+=1
else: pass
return KDA
def run():
Users = inputWKDA(input('1, 2?>>>'))
MVP = max(Users)
print('MVP :', 'a'+str(Users.index(MVP)) if Users.index(MVP)<5 else 'b'+str(Users.index(MVP)-5))
if __name__ == '__main__':
run()
아래는 풀이 참고
def KPoint(K):
if K>=2 and K<=5:
return K + sum(i for i in range(2, K+1))
else: return 0
def inputWKDA(win):
KDA = ([0]+[0]*5+[1]*5, [0]+[1]*5+[0]*5)[win == 'a']
for i in range(1, 11):
K, D, A = map(int, input('>>>').split('/'))
KDA[i] += (K*2 + A*1)/D + KPoint(K)
return KDA
def run():
Users = inputWKDA(input('1, 2?>>>'))
MVP = max(Users)
print('MVP :', 'a'+str(Users.index(MVP)) if Users.index(MVP)<5 else 'b'+str(Users.index(MVP)-5))
if __name__ == '__main__':
run()
업데이트 내용은 임의적인 연속킬 정보를 입력받아 단순 계산하는 형태인듯 하여 업데이트 사항은 미구현
def kda(dicts):
MVP = 0
for keys, values in dicts.items():
temp = values.split('/')
maxScore = ((int(temp[0])*2) + int(temp[2]))/int(temp[1])
if MVP < maxScore:
MVP = maxScore
k = keys
return (k)
input = {'a1': '1/6/3', 'a2': '5/6/2', 'a3': '4/1/4', 'a4': '6/3/2', 'a5': '4/5/7', 'b1': '4/3/2', 'b2': '1/4/6', 'b3': '5/1/4', 'b4': '6/4/1', 'b5': '4/5/1'}
k = kda(input)
print('MVP : {}'.format(k))
MVP
inp = '1/6/3 5/6/2 4/1/4 6/3/2 4/5/7 4/3/2 1/4/6 5/1/4 6/4/1 4/5/1'
names = 'a1 a2 a3 a4 a5 b1 b2 b3 b4 b5'.split()
usrs = []
for line in inp.split():
K, D, A = [int(x) for x in line.split('/')]
usrs.append(((K * 2 + A) / D, names.pop(0)))
print('MVP :', max(usrs)[1])
업데이트
inp = '1/6/3/S 5/6/2/P 4/1/4/D 6/3/2/S 4/5/7/Q 4/3/2/D 1/4/6/S 5/1/4/S 6/4/1/S 4/5/1/Q'
multikill = {'X': 0, 'S': 0, 'D': 2, 'T': 3, 'Q': 4, 'P': 5}
names = 'a1 a2 a3 a4 a5 b1 b2 b3 b4 b5'.split()
usrs, a_team, b_team = [], 0, 0
for line in inp.split():
tmp = line.split('/')
K, D, A = [int(x) for x in tmp[:3]]
M = multikill[tmp[3]]
id = names.pop(0)
usrs.append(((K * 2 + A) / D + M, id))
a_team += 'a' in id and M
b_team += 'b' in id and M
usrs = [(score + a_team*('a' in id) + b_team*('b' in id), id) for score, id in usrs]
print(usrs)
print('MVP :', max(usrs)[1])
# -*- coding : utf-8 -*-
player_name = ['a1', 'a2', 'a3', 'a4', 'a5',
'b1', 'b2', 'b3', 'b4', 'b5' ]
player_score = {}
for rep in player_name:
kda = list(map(int, input('당신의 KDA를 입력하십시오. : ').split(' ')))
score = (kda[0] * 2 + kda[2]) / kda[1]
player_score[rep] = score
for rep in range(len(player_score)):
if list(player_score.values())[rep] == max(player_score.values()):
mvp = list(player_score.keys())[rep]
print('MVP : ', mvp)
dic={}
cont=0
for i in range(1,6):
k,d,a=(int(input("K: ")),int(input("D: ")),int(input("A: ")))
member='a'+str(i)
point=(k*2 +a)/d
dic[member]=point
for i in range(1,6):
k,d,a=(int(input("K: ")),int(input("D: ")),int(input("A: ")))
member='b'+str(i)
point=(k*2 +a)/d
dic[member]=point
for i in dic:
if dic[i]==max(dic.values()):
print("MVP: {0}, {1}점".format(i,max(dic.values())))
초보자라 너무 복잡하게 풀었습니다.
a1="1/6/3"
a2="5/6/2"
a3="4/1/4"
a4="6/3/2"
a5="4/5/7"
b1="4/3/2"
b2="1/4/6"
b3="5/1/4"
b4="6/4/1"
b5="4/5/1"
dic = {}
max = 0
count = 0
value_count = 0
for i in range(1,11):
if i < 6:
dic["a"+str(i)] = eval('a'+str(i)).split("/")
else :
dic["b"+str(i-5)] = eval('b'+str(i-5)).split("/")
#print(dic)
for v in dic.values():
count +=1
temp = list(map(int, v))
result =(temp[0] *2 +temp[2]) /temp[1]
if max < result :
max = result
value_count = count
if value_count > 5:
value_count = "b"+str(value_count - 5)
else :
value_count = "a"+str(value_count)
print("MVP는{} 이고 값은 {}이다".format(value_count, max))
```{.java}
import java.util.*;
public class MVP를찾아라 {
static ArrayList
public void User(int[] user) {
int point = 0;
point = (user[0]*2+user[2]*1)/user[1];
mvp.add(point);
}
public static void main(String[] args) {
String[] name = {"a1","a2","a3","a4","a5","b1","b2","b3","b4","b5"};
int[] a1n = {1,6,3};
int[] a2n = {5,6,2};
int[] a3n = {4,1,4};
int[] a4n = {6,3,2};
int[] a5n = {4,5,7};
int[] b1n = {4,3,2};
int[] b2n = {1,4,6};
int[] b3n = {5,1,4};
int[] b4n = {6,4,1};
int[] b5n = {4,5,1};
MVP를찾아라 c1 = new MVP를찾아라();
c1.User(a1n);
c1.User(a2n);
c1.User(a3n);
c1.User(a4n);
c1.User(a5n);
c1.User(b1n);
c1.User(b2n);
c1.User(b3n);
c1.User(b4n);
c1.User(b5n);
int count = 0;
for(int i=0; i<mvp.size(); i++) {
if(count<mvp.get(i)) {
count=mvp.get(i);
}
}
for(int k=0; k<name.length; k++) {
if(mvp.get(k)==count) {
System.out.println(name[k]);
break;
}
}
}
}
//업데이트는 안했습니다.....
temp=[]
user={}
for i in range(0,10):
if i<5:
name='a'+str(i+1)
else:
name='b'+str(i-4)
a=list(map(int,input(name+'의KDA:').split('/')))
user[name]=(a[0]*2+(a[2]*1)/a[1])
print("MVP : %s"%(max(user, key=user.get)))
파이썬 3입니다.
주어진 조건을 만족시키면서 D가 0인 경우도 생각해봤습니다
1차 업데이트의 결과로 입력의 형태가 어떤 식으로 달라지는지는 언급이 없어서 제가 적절하게 정했습니다.
점수가 같은 사람은 MVP가 공동으로 되도록 하였습니다.
# 1차 업데이트 적용
# K/D/A/승리여부/연속처치의 형태로 입력
# 승리여부는 1과 0으로 입력된다고 가정
# 연속처치: P = 5, Q = 4, T = 3, D = 2, 없으면 0
# 연속처리를 여러번 했으면 알파벳을 연속으로 입력한다: ex) 7/2/3/1/TD
# 예시
# 1/2/3/1/0: 1킬, 2뎃, 3어시, 승리, 연속처치 없음
# 6/6/3/0/P: 6킬, 6뎃, 3어시, 패배, 펜타킬
KDA = [input().split('/') for _ in range(10)]
no_D = list(map(lambda x: int(x[1]) == 0, KDA)) # D 가 0인 경우가 있으면 점수가 무한이 되므로 이를 살핀다
Score = list(map(lambda x: (int(x[0]) * 2 + int(x[2])) / (int(x[1]) + (x[1] == '0')) + int(x[3]) + (
5 * (x[4].count('P')) + 4 * (x[4].count('Q')) + 3 * (x[4].count('T')) + 2 * (x[4].count('D'))), KDA))
if no_D != 10 * [False]: # 하나라도 D가 없으면 그들 중에 MVP를 뽑아야 한다.
Score = [Score[i] * no_D[i] for i in range(10)]
print('MVP : ', end='')
max_index = [i for i in range(10) if Score[i] == max(Score)]
for i in max_index:
print('{}{} '.format('a' * (1 - i // 5) + 'b' * (i // 5), (i % 5) + 1))
alst,blst=[],[]
bk={"P":4,"Q":3,"T":2,"D":1,"N":0}
winner=input("승리팀을 입력해주십시오(A 또는 B): ")
if winner=="A":
ws,ls=1,0
else:
ws,ls=0,1
for n in range(10):
if n<5:
atscore=input("A"+str(n+1)+"의 K/D/A + 보너스 킬을 입력하십시오: ")
ats,bks=list(map(int,atscore[:-2].split("/"))),bk.get(atscore[-1])
ascore=((ats[0]*2+ats[2])/(ats[1]+1))+bks*2+ws
alst.append(ascore)
else:
btscore=input("B"+str(n-4)+"의 K/D/A + 보너스 킬을 입력하십시오: ")
bts,bks=list(map(int,btscore[:-2].split("/"))),bk.get(btscore[-1])
bscore=((bts[0]*2+bts[2])/(bts[1]+1))+bks*2+ls
blst.append(bscore)
if max(alst)>max(blst):
mvp="A"+str(alst.index(max(alst))+1)
else:
mvp="B"+str(blst.index(max(blst))+1)
print("MVP:",mvp)
상위 5개 데이터가 승리팀이 아니라 승리팀을 먼저 입력해주는 방식으로 풀어봤습니다.
inp='''3/0/4 D
2/5/6 N
12/4/2 P
1/2/8 N
2/2/8 N
5/5/2 T
1/5/2 N
1/3/1 N
2/4/5 N
4/3/5 Q'''.split('\n')
max_score=0
for i in range (len(inp)):
inp[i]=inp[i].split(' ')
inp[i][0]=inp[i][0].split('/')
if i<5:
member='A'+str(i%5+1)
else:
member='B'+str(i%5+1)
k,a,d,up=int(inp[i][0][0]), int(inp[i][0][1]), int(inp[i][0][2]), inp[i][1]
score=(k*2+a)/(d+1)
if up=='K':
score+=4
elif up=='Q':
score+=3
elif up=='T':
score+=2
elif up=='D':
score+=1
elif up=='N':
score+=0
if score>max_score:
max_score, max_member=score, member
print (max_member)
class Player:
def __init__(self,team,id):
self.team = team
self.id = id
self.k = 0
self.d = 0
self.a = 0
self.point = 0
self.kill = 0
def setStat(self,data):
self.k = float(data[0])
self.a = float(data[1])
self.d = float(data[2])
self.point = (self.k*2+self.a)/(self.d+1)
if data[3] in "P" and self.k>=5:
self.kill = 4
elif data[3] in "Q" and self.k>=4:
self.kill = 3
elif data[3] in "T" and self.k>=3:
self.kill = 2
elif data[3] in "D" and self.k>=2:
self.kill = 1
elif data[3] in "N":
self.kill = 0
else:
self.kill = 0
self.point += self.kill
class GameGround:
def __init__(self):
self.player = []
self.mvp = ""
def createUser(self):
self.player.append(Player("A",1))
self.player.append(Player("A",2))
self.player.append(Player("A",3))
self.player.append(Player("A",4))
self.player.append(Player("A",5))
self.player.append(Player("B",1))
self.player.append(Player("B",2))
self.player.append(Player("B",3))
self.player.append(Player("B",4))
self.player.append(Player("B",5))
def getData(self):
data = """3/0/4 D
2/5/6 N
12/4/2 P
1/2/8 N
2/2/8 N
5/5/2 T
1/5/2 N
1/3/1 N
2/4/5 N
4/3/5 Q""".split("\n")
for i,n in enumerate(data):
temp = n.split(" ")
line = temp[0].split("/")
line.append(temp[1])
self.player[i].setStat(line)
def addTeamPoint(self):
sumA = 0
sumB = 0
for i,n in enumerate(self.player):
if n.team in "A":
sumA += n.point
elif n.team in "B":
sumB += n.point
for i,n in enumerate(self.player):
if sumA>=sumB and n.team in "A":
n.point += 1
elif sumB>=sumA and n.team in "B":
n.point += 1
def setMVP(self):
max = 0
imax = 999
for i,n in enumerate(self.player):
if n.point>=max:
max = n.point
imax = i
self.mvp = self.player[imax].team+str(self.player[imax].id)
game = GameGround()
game.createUser()
game.getData()
game.addTeamPoint()
game.setMVP()
print (game.mvp)
kda = [[],[],[],[],[]],[[],[],[],[],[]]
score = []
for i in range(0,2):
for k in range(0,5):
kda[i][k] = input()
kda[i][k] = kda[i][k].split('/')
kda[i][k].append(kda[i][k][2][2])
kda[i][k][2] = kda[i][k][2][0]
K = int(kda[i][k][0])
D = int(kda[i][k][1])
A = int(kda[i][k][2])
P = kda[i][k][3]
if P=='P':
score.append(((K*2+A)/(D+1))+4+3+2+1)
elif P=='Q':
score.append(((K*2+A)/(D+1))+3+2+1)
elif P=='T':
score.append(((K*2+A)/(D+1))+2+1)
elif P=='D':
score.append(((K*2+A)/(D+1))+1)
else:
score.append((K*2+A)/(D+1))
for i in range(0,5):
score[i] += 1
print('MVP : A' + str(score.index(max(score))+1))
def s_point(temp):
if temp == 'p':
series_p = 4
elif temp == 'q':
series_p = 3
elif temp == 't':
series_p = 2
elif temp == 'd':
series_p = 1
else:
series_p = 0
return series_p
def winner(temp1, temp2):
a = sum(temp1.values())
b = sum(temp2.values())
if a > b:
return 1
elif a < b:
return 0
team_A = {}
team_B = {}
for i in range(1,6):
name = 'A'+str(i)
inp = input('SCORE OF {} K/D/A + series :'.format(name))
series = inp.split()[1].lower()
k, d, a = map(int,inp.split()[0].split('/'))
score = ((k*2 + a) / (d+1)) + s_point(series)
team_A[name] = score
for i in range(1,6):
name = 'B'+str(i)
inp = input('SCORE OF {} K/D/A + series :'.format(name))
series = inp.split()[1].lower()
k, d, a = map(int,inp.split()[0].split('/'))
score = ((k*2 + a) / (d+1)) + s_point(series)
team_B[name] = score
if winner(team_A, team_B) == 1:
for aa in team_A.keys():
team_A[aa] += 1
if winner(team_A, team_B) == 1:
for aa in team_B.keys():
team_B[aa] += 1
high = sorted(team_A.items(), key=lambda x:x[1], reverse=True)
print('MVP is {} and the score is {}'.format(high[0][0], high[0][1]))
def point_cal(line):
point=0
for_cal={'P':4,'Q':3,'T':2,'D':1,'N':0}
for i in for_cal:
if i in line:
point+=for_cal[i]
line=line[:-2]
lines=line.split("/")
point=point+(int(lines[0])*2+int(lines[1]))/int(lines[2])
return point
def MVP():
for_answer={}
for i in range(1,11,1):
who_is_MVP=input("KDA?")
add=0
if i<6:
add=1
add+=point_cal(who_is_MVP)
for_answer[i]=add
mvp=1
print(for_answer)
for i in range(1,11,1):
if for_answer[mvp]<for_answer[i]:
mvp=i
if mvp<6:
print("A"+str(mvp))
else:
print("B"+str(mvp))
pd = []
MAX = 0
kp = {'P':4,'Q':3,'T':2,'D':1,'N':0}
i = 1
for x in range(10):
pd.append(input())
print(pd)
for player in pd:
temp = player.split(" ")
kda = list(map(int,temp[0].split("/")))
point = ((kda[0]*2)+kda[2])/(kda[1]+1)
if(i < 6):
result = point + kp.get(temp[1])* (kp.get(temp[1]) + 1) + 1
else:
result = point + kp.get(temp[1])* (kp.get(temp[1]) + 1)
if(result > MAX):
MAX = result
ID = i
i += 1
print(result)
print(MAX)
if(ID < 6): print("MVP is A%d" %ID)
else: print("MVP is B%d" %(ID-5))
연속킬 할 경우 킬당 점수계산 ex) 펜타킬 : 4*5 = 20 mvp = a3
pd = []
MAX = 0
kp = {'P':4,'Q':3,'T':2,'D':1,'N':0}
i = 1
for x in range(10):
pd.append(input())
print(pd)
for player in pd:
temp = player.split(" ")
kda = list(map(int,temp[0].split("/")))
point = ((kda[0]*2)+kda[2])/(kda[1]+1)
if(i < 6):
result = point + kp.get(temp[1]) + 1
else:
result = point + kp.get(temp[1])
if(result > MAX):
MAX = result
ID = i
i += 1
print(result)
print(MAX)
if(ID < 6): print("MVP is A%d" %ID)
else: print("MVP is B%d" %(ID-5))
연속킬시 그 점수만 더함 ex) 펜타킬: 4점 mvp = a1
list1=[]
a=1
for i in range(10):
a,b,c=map(int,input().split("/"))
d=input()
score=(a*2+c)/(b+1)
if a<6:
score+=1
a+=1
if d=='P':
score+=4
elif d=='Q':
score+=3
elif d=='T':
score+=2
elif d=='D':
score+=1
list1.append(score)
list2=sorted(list1)
n=0
for i in list1:
if list2[len(list2)-1] == i:
print("MVP player is",n)
n+=1
Team = {}
add_score = {
'P' : 4,
'Q' : 3,
'T' : 2,
'D' : 1,
'N' : 0
}
for i in range(1,11):
K, D, A, C = input().replace(" ","/").split("/")
score = int((int(K) * 2 + int(A)) / (int(D) + 1))
if i < 6:
Team[f"A{i}"] = [K,D,A,score,C]
if i > 5:
Team[f"B{i-5}"] = [K,D,A,score,C]
max_score = 0
for i in Team.values():
for j in add_score.keys():
if i[4] == j:
i[3] += add_score[j]
if i[3] > max_score:
max_score = i[3]
for k in Team.keys():
if Team[k][3] == max_score:
print(k,max_score)
break
음.. 킬 연속으로 했는지 안했는지에 대한게 조금 애매한거 같아서 일단 펜타킬 1번 했다는걸로 해서 했습니다. mvp 는 A1이네요
text="""3/0/4 D
2/5/6 N
12/4/2 P
1/2/8 N
2/2/8 N
5/5/2 T
1/5/2 N
1/3/1 N
2/4/5 N
4/3/5 Q
"""
a=text.splitlines()
result=[]
MVPscore=[]
user=['A1','A2','A3','A4','A5','B1','B2','B3','B4','B5']
MVP=''
save=0
for i in a:
x=i.split()
result.append(x)
for i in result:
score=0
if i in [result[0],result[1],result[2],result[3],result[4]]:
score += 1
for z in i:
if z.isupper():
if z == 'P':
score += 4
if z == 'Q':
score += 3
if z == 'T':
score += 2
if z == 'D':
score += 1
else:
f=z.split('/')
score += (int(f[0])*2 + int(f[2])) / (int(f[1])+1)
MVPscore.append(score)
for s,n in enumerate(MVPscore):
if save == 0:
MVP = s
save = n
if n > save:
MVP=s
save = n
print(user[MVP])
문제는 좋은것 같은데 결과가 예시랑 자꾸 다르게 나오네요. 그냥 직접 계산을 해 보아도 3/0/4에 더블킬 먹은 분이 12/4/2에 펜타킬 먹은 분보다 점수가 더 높게 나오는데 잘못된 부분 있으면 가르쳐 주시면 감사하겠습니다.
S = """3/0/4 D
2/5/6 N
12/4/2 P
1/2/8 N
2/2/8 N
5/5/2 T
1/5/2 N
1/3/1 N
2/4/5 N
4/3/5 Q""".split('\n')
A = []
B = []
K = {'P':4,'Q':3,'T':2,'D':1,'N':0}
for i in S[0:5] :
a = i.split('/')
aa = a[2][2]
A.append((int(a[0])*2)+int(a[2][0])/1 + int(a[1])+K[aa])
for ii in S[5:] :
b = ii.split('/')
bb = b[2][2]
B.append((int(b[0])*2)+int(b[2][0])/1 + int(b[1])+K[bb])
if sum(A)>sum(B) :
print('우승팀은 A팀!')
print(f'MVP는 A{A.index(max(A))} 입니다')
elif sum(A)<sum(B) :
print('우승팀은 B팀!')
print(f'MVP는 B{B.index(max(B))} 입니다')
else :
print('동점!')
#users = list of user
#user = one of users. This data type is list. This list has information of KDA system and win or defeat.
def series_kill(user):
pass
#return 1~4
def winner(user):
pass
#return True or False
def USER_MVP(K,A,D, user):
MVP_point = (2 * K + A) / (D + 1)
if winner(user): MVP_point = MVP_point+1
if series_kill(user): MVP_point = MVP_point+series_kill()
return MVP_point
def IF_MVP(users):
#~~~~
return result
지저분해서 안함 ㅅㄱ ㅋ
#codingdojing_MVP
kill = {'P': 4, 'Q': 3, 'T': 2, 'D': 1, 'N': 0}
class KDA:
def __init__(self, data):
self.data = data.split() # ['3/0/5', 'D']
self.K = 0
self.D = 0
self.A = 0
self.kill = ''
self.result = 0 # win = 1, lose = 0
self.score = 0
def dataAnalysis(self, result):
kda = self.data[0].split('/') #['3', '0', '5']
self.K = int(kda[0]) #3
self.D = int(kda[1]) #0
self.A = int(kda[2]) #5
self.kill = self.data[1] #'D'
self.result = int(result)
self.score = (self.K*2 + self.A)/(self.D + 1) + kill[self.kill] + self.result
winners = []
losers = []
MVP_score = 0
MVP = ''
for i in range(5):
winner = KDA(input())
winner.dataAnalysis(1)
winners.append(winner)
for i in range(5):
loser = KDA(input())
loser.dataAnalysis(0)
losers.append(loser)
for i in range(5):
print(f'A{i+1} = {round(winners[i].score, 2)}', end = ' ')
if MVP_score < winners[i].score:
MVP = f'A{i+1}'
MVP_score = round(winners[i].score, 2)
print()
for i in range(5):
print(f'B{i+1} = {round(losers[i].score, 2)}', end = ' ')
if MVP_score < losers[i].score:
MVP = f'B{i+1}'
MVP_score = round(losers[i].score, 2)
print()
print(MVP, MVP_score)
클래스를 활용해 보았습니다.
def score (arr):
a= arr[0:-1].split("/")
score = round(((int(a[0])*2+int(a[2]))/(int(a[1])+1)),2)
if arr[-1]=='P':
return score+4
elif arr[-1]=='Q':
return score+3
elif arr[-1]=='T':
return score+2
elif arr[-1]=='D':
return score+1
else:
return score
kda = []
for i in range(5):
print("A",i+1,"의")
a = input("K/D/A를 입력하시오")
kda.append(a)
for i in range(5):
print("B",i+1,"의")
a = input("K/D/A를 입력하시오")
kda.append(a)
score_arr = list(map(score,kda))
for i in range(5):
score_arr[i] +=1
mvp = score_arr.index(max(score_arr))+1
if mvp<6 :
print('A',mvp)
else :
print('B',mvp)