이 페이지는 코딩도장 데이터의 읽기 전용 정적 보관본입니다.

MVP를 찾아라

게임 개발

당신이 참여했던 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 오류 수정 완료

2019/01/29 10:37

김영성

만일 노뎃 퍼펙트를 기록한 유저가 다수 있을 경우, 그들의 성적 산출근거는 어떻게 되나요? - 암살자까마귀, 2019/05/03 15:50
한 게임의 유저는 총 다섯명으로 a1,a2,...a5 와 b1,b2...b5로 구성된다. => 한 게임의 유저는 다섯 명씩 두 팀, 총 열 명으로 a1,a2,...a5 와 b1,b2...b5로 구성된다. - Noname, 2020/01/25 11:58
수정되었습니다. - 김영성, 2020/01/25 11:58
+1 연속처치 부분에서 만약 펜타킬 하면 20점을 얻는건지 4점을 얻는건지 궁금 합니다 4점만 얻으면 mvp는 a1이 출력되는거 같은데 - guma go, 2020/12/23 00:09

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)

2019/01/29 16:59

yuong pyo lee

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

2019/01/29 10:51

김영성

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를 입력받는 양식으로 작성했습니다. 아직 초보라 코드가 지저분한부분이 있네요ㅠㅠ 지적해주시면 감사합니다.

2019/01/30 00:06

얀차

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)))

2019/01/31 22:39

Roy

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를 구했습니다.

2019/02/14 12:03

동동

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)

2019/03/10 19:36

Fiesta

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))

2019/03/31 17:02

D.H.

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

2019/04/10 19:37

Creator

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인 경우, 따로 추려서 탈주/자리비움 제재를 받도록 하였읍니다.

2019/05/03 15:44

암살자까마귀

#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';
    }
}

2019/05/15 17:21

Wonsang Kim

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()

2019/05/25 16:43

이진형

업데이트 내용은 임의적인 연속킬 정보를 입력받아 단순 계산하는 형태인듯 하여 업데이트 사항은 미구현

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))

2019/06/07 11:10

Hwaseong Nam

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])

2019/06/25 19:43

Noname

# -*- 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)

2019/07/04 20:51

kim hippo

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())))

2019/08/08 23:14

박재욱

초보자라 너무 복잡하게 풀었습니다.

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))

2019/10/14 23:57

semipooh

```{.java} import java.util.*; public class MVP를찾아라 { static ArrayList mvp = new 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;
        }
    }
    }

}

//업데이트는 안했습니다.....

2019/11/13 20:44

big Ko

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)))

2019/12/26 00:15

뚜루꾸까까

파이썬 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))

2020/01/24 23:30

우재용

수정되었습니다. - 김영성, 2020/01/25 12:01
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개 데이터가 승리팀이 아니라 승리팀을 먼저 입력해주는 방식으로 풀어봤습니다.

2020/02/23 11:57

박시원

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)

2020/06/03 09:45

Buckshot

결과 : A3 - Buckshot, 2020/06/03 09:46
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)

2020/11/13 12:57

footsize

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))

2020/11/20 20:37

김우석

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]))

2020/11/24 09:18

DSHIN

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))

2020/12/09 16:55

전준혁

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

2020/12/23 00:12

guma go

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

2021/01/21 22:49

장래희망파이썬마스터

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이네요

2021/02/17 18:26

개촙오

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에 펜타킬 먹은 분보다 점수가 더 높게 나오는데 잘못된 부분 있으면 가르쳐 주시면 감사하겠습니다.

2021/03/08 09:45

최우진

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('동점!')

2021/05/20 17:45

약사의혼자말

#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

지저분해서 안함 ㅅㄱ ㅋ 

2021/07/07 17:59

inkuk ju

#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)



클래스를 활용해 보았습니다.

2021/07/14 16:15

Jaeman Lee

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)

2022/01/20 02:51

양캠부부

목록으로