[문제출처 : Codechef] 이번에 풀어볼 문제는 게임의 승자를 찾는 문제입니다. 다음과 같은 게임이 있다고 가정해 봅시다.
두 명의 플레이어가 게임을 진행합니다. 총 N라운드가 진행되는데, 이 때 각 라운드까지의 누적 점수의 차이가 가장 크게 벌어진 라운드를 이긴 승자가 우승자가 되는 룰입니다.
즉, 만약 1라운드에서 10:5로 선수1이 이기고,
2라운드에서 6:8로 선수2가 이기고,
3라운드에서 5:10로 선수2가 이겼다고 했을 때,
1라운드까지 누적 점수는 10:5, 2라운드까지 누적 점수는 16:13, 3라운드까지 누적 점수는 21:23으로써, 결국 총점에서는 선수2가 이겼지만, 각 라운드까지의 누적점수의 차이는 1라운드 때 5점으로써 선수1이 최종 우승을 하게 됩니다.
즉, 만약 1라운드에서 10:5로 선수1이 이기고,
2라운드에서 6:8로 선수2가 이기고,
3라운드에서 5:10로 선수2가 이겼다고 했을 때,
1라운드까지 누적 점수는 10:5, 2라운드까지 누적 점수는 16:13, 3라운드까지 누적 점수는 21:23으로써, 결국 총점에서는 선수2가 이겼지만, 각 라운드까지의 누적점수의 차이는 1라운드 때 5점으로써 선수1이 최종 우승을 하게 됩니다.
선수1과 선수2의 각 라운드 점수가 list의 형태로 주어진다고 가정해 봅시다.(P1, P2)
def winnerOfGame(P1, P2):
#먼저 첫 라운드의 결과를 result로 기록해 둡니다.
sum1, sum2 = P1[0], P2[0]
if sum1 > sum2:
result = (sum1-sum2, "Player 1")
else:
result = (sum2-sum1, "Player 2")
#다음라운드부터 쭉 돌면서,
for i in range(1, len(P1)):
sum1 += P1[i] #각각 플레이어의 누적 점수를 구하고,
sum2 += P2[i]
#얼마나 크게 이겼는지와 누가 이겼는지를 담아둡니다.
if sum1 > sum2:
diff = sum1 - sum2
player = "Player 1"
else:
diff = sum2 - sum1
player = "Player 2"
#만약 해당 라운드의 차이 값이 기존의 최대 차이값보다 크면, result를 업데이트합니다.
if diff > result[0]:
result = (diff, player)
#최종 승자와 그 점수 차이를 리턴합니다.
return result
가장 기초적인 for문과 if문들을 활용한 문제라고 할 수 있습니다. 물론 list나 tuple의 구조에 대해서도 잘 이해하고 계셔야겠죠? 이제 결과를 확인해 보면,
>>> P1=[140, 89, 90, 112, 88]
>>> P2=[82, 134, 110, 106, 90]
>>> print winnerOfGame(P1, P2)
(58, 'Player 1')
결과가 잘 나옴을 확인할 수 있습니다 :) 간단한 문제이니 꼭 한번씩 구현해 보시길 ~