본문 바로가기
코딩테스트/Beakjoon

백준 1296번 : 팀 이름 정하기 [Python]

by 나스나키 2023. 11. 18.
728x90

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보다 작거나 같은 자연수이다.

 
 
 

출력

첫째 줄에 우승할 확률이 가장 높은 팀 이름을 출력한다.

 

 

예시

 

코드

ms = input()
n = int(input())
li = sorted([input() for i in range(n)])
p = i = 0
for ie in range(n):
    L = ms.count("L") + li[ie].count("L")
    O = ms.count("O") + li[ie].count("O")
    V = ms.count("V") + li[ie].count("V")
    E = ms.count("E") + li[ie].count("E")
    a = ((L + O) * (L + V) * (L + E) * (O + V) * (O + E) * (V + E)) % 100
    if p < a:
        p = a
        i = ie
print(li[i])

 

 

코드 해석

  • 연두의 이름을 받는다.
  • 팀 이름 목록의 수를 받고 팀 이름들을 list로 정리한다.
  • for 문으로 각 단의 우승 확률을 구한다.
  • p에 우슬 확률을 넣고 i에 리스트 인덱스 값을 넣는다.
  • 선정된 이름을 출력한다.

 

 

728x90