문제
연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다.
미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다.
이환이가 만든 공식은 사용하려면 먼저 다음 4가지 변수의 값을 계산해야 한다.
L = 연두의 이름과 팀 이름에서 등장하는 L의 개수
O = 연두의 이름과 팀 이름에서 등장하는 O의 개수
V = 연두의 이름과 팀 이름에서 등장하는 V의 개수
E = 연두의 이름과 팀 이름에서 등장하는 E의 개수
그 다음, 위에서 구한 변수를 다음 식에 입력하면 팀 이름의 우승할 확률을 구할 수 있다.
((L+O) × (L+V) × (L+E) × (O+V) × (O+E) × (V+E)) mod 100
연두의 영어 이름과 팀 이름 후보 N개가 주어졌을 때, 우승할 확률이 가장 높은 팀 이름을 구해보자.
확률이 가장 높은 팀이 여러가지인 경우 사전 순으로 가장 앞서는 팀 이름이 우승할 확률이 가장 높은 것이다.
https://www.acmicpc.net/problem/1296
입력
첫째 줄에 연두의 영어 이름이 주어진다.
둘째 줄에는 팀 이름 후보의 개수 N이 주어진다.
셋째 줄부터 N개의 줄에 팀 이름이 한 줄에 하나씩 주어진다.
연두의 영어 이름과 팀 이름은 길이는 1보다 크거나 같고, 20보다 작거나 같으며, 알파벳 대문자로만 이루어져 있다.
N은 50보다 작거나 같은 자연수이다.
출력
첫째 줄에 우승할 확률이 가장 높은 팀 이름을 출력한다.
예제
# input
LOVE
3
JACOB
FRANK
DANO
# output
FRANK
# input
JANE
4
THOMAS
MICHAEL
INDY
LIU
# output
INDY
문제 풀이
import sys
input = sys.stdin.readline
# 연두 이름 입력 받기
name = input().rstrip()
N = int(input())
# 정답 변수 선언
answer = []
for i in range(N):
# 팀 이름 입력 받기
team_name = input().rstrip()
# 연두 이름과 팀 이름에서 개수 count하여 확률 구하기
L = name.count('L') + team_name.count('L')
O = name.count('O') + team_name.count('O')
V = name.count('V') + team_name.count('V')
E = name.count('E') + team_name.count('E')
result = ((L+O) * (L+V) * (L+E) * (O+V) * (O+E) * (V+E)) % 100
answer.append((result, team_name))
# 점수 기준으로 내림차순 정렬하고, 점수가 동일하다면 알파벳 순서로 정렬
answer.sort(key=lambda x: (-x[0], x[1]))
print(answer[0][1])
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.