https://www.acmicpc.net/problem/1296
1296번: 팀 이름 정하기
연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다. 미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다. 이환
www.acmicpc.net
문제
연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다. 미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다.
이환이가 만든 공식은 사용하려면 먼저 다음 4가지 변수의 값을 계산해야 한다.
- L = 연두의 이름과 팀 이름에서 등장하는 L의 개수
- O = 연두의 이름과 팀 이름에서 등장하는 O의 개수
- V = 연두의 이름과 팀 이름에서 등장하는 V의 개수
- E = 연두의 이름과 팀 이름에서 등장하는 E의 개수
그 다음, 위에서 구한 변수를 다음 식에 입력하면 팀 이름의 우승할 확률을 구할 수 있다.
((L+O) × (L+V) × (L+E) × (O+V) × (O+E) × (V+E)) mod 100
연두의 영어 이름과 팀 이름 후보 N개가 주어졌을 때, 우승할 확률이 가장 높은 팀 이름을 구해보자. 확률이 가장 높은 팀이 여러가지인 경우 사전 순으로 가장 앞서는 팀 이름이 우승할 확률이 가장 높은 것이다.
입력
첫째 줄에 연두의 영어 이름이 주어진다. 둘째 줄에는 팀 이름 후보의 개수 N이 주어진다. 셋째 줄부터 N개의 줄에 팀 이름이 한 줄에 하나씩 주어진다.
연두의 영어 이름과 팀 이름은 길이는 1보다 크거나 같고, 20보다 작거나 같으며, 알파벳 대문자로만 이루어져 있다. N은 50보다 작거나 같은 자연수이다.
출력
첫째 줄에 우승할 확률이 가장 높은 팀 이름을 출력한다.
내 풀이
# 31120kb 44ms
yeondoo = input() # 연두 이름
team_num = int(input()) # 팀 이름 수
name_list = [] # 각 팀 이름 명단
max_p = 0
max_name = ''
for _ in range(team_num): # 팀 이름 리스트로 만들기
name_list.append(input())
name_list = sorted(name_list) # 리스트를 알파벳 순서로
for name in name_list: # 각 팀 이름 별로
teamname = name + yeondoo
l = teamname.count("L") # 연두이름이랑 합쳐서 알파벳 갯수 파악
o = teamname.count("O")
v = teamname.count("V")
e = teamname.count("E")
# % 계산
ans = ((l+o)*(l+v)*(l+e)*(o+v)*(o+e)*(v+e))%100
if ans == 0: # % 가 0이면 계산 x
pass
elif ans > max_p : # 최대 %보다 높으면
max_p = ans # %수치와 팀이름 변경
max_name = name #(수치가 같으면 알파벳 빠른 글자가 여전히 남음)
if max_p == 0:
print(name_list[0]) # %가 모두 0이면, 제일 처음 알파벳 이름 출력
else:
print(max_name) # 최대 %가 나온 팀 이름 출력
'파이썬 알고리즘 연습' 카테고리의 다른 글
[Python | 백준 1357번] 뒤집힌 덧셈 (0) | 2024.01.24 |
---|---|
[Python | 백준 1356번] 유진수 (0) | 2024.01.24 |
[Python | 백준 1292번] 쉽게 푸는 문제 (1) | 2024.01.24 |
[Python | 백준 1268번] 임시 반장 정하기 (1) | 2024.01.22 |
[Python | 백준 1259번] 팰린드롬수 (0) | 2024.01.22 |