백준 문제/LG전자 준비
1296: 팀 이름 정하기
goldpig
2024. 4. 7. 17:05
728x90
설명
연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다. 미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다.
이환이가 만든 공식은 사용하려면 먼저 다음 4가지 변수의 값을 계산해야 한다.
- L = 연두의 이름과 팀 이름에서 등장하는 L의 개수
- O = 연두의 이름과 팀 이름에서 등장하는 O의 개수
- V = 연두의 이름과 팀 이름에서 등장하는 V의 개수
- E = 연두의 이름과 팀 이름에서 등장하는 E의 개수
그 다음, 위에서 구한 변수를 다음 식에 입력하면 팀 이름의 우승할 확률을 구할 수 있다.
((L+O) × (L+V) × (L+E) × (O+V) × (O+E) × (V+E)) mod 100
연두의 영어 이름과 팀 이름 후보 N개가 주어졌을 때, 우승할 확률이 가장 높은 팀 이름을 구해보자. 확률이 가장 높은 팀이 여러가지인 경우 사전 순으로 가장 앞서는 팀 이름이 우승할 확률이 가장 높은 것이다.
핵심 아이디어
- 주어진 조건대로 구현하면 되는 문제다.
- mod == %
코드 구현
Python
# 연두의 영어 이름
name = input().upper()
# 팀 이름 후보 수
n = int(input())
# 팀 이름을 저장할 배열
team_list = []
for _ in range(n):
team_name = input().upper()
team_list.append(team_name)
team_list.sort() # 사전 순 정렬
# 확률값을 저장할 배열
result = []
for i in range(n):
# L O V E의 각각의 개수를 찾자.
L = name.count("L") + team_list[i].count("L")
O = name.count("O") + team_list[i].count("O")
V = name.count("V") + team_list[i].count("V")
E = name.count("E") + team_list[i].count("E")
# 공식
p = ((L+O)*(L+V)*(L+E)*(O+V)*(O+E)*(V+E)) % 100
result.append(p)
# 우승 확률이 가장 높은 팀 이름 출력
print(team_list[result.index(max(result))].upper())
C++
#include <iostream>
#include <set>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
string name;
int n;
vector<string> t_name;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> name;
cin >> n;
for (int i = 0; i < n; i++) {
string team_name;
cin >> team_name;
t_name.push_back(team_name);
}
// 사전 출력을 위해 정렬
sort(t_name.begin(), t_name.end());
// 이제 우승확률을 구해보자
int max_value = 0; int max_index = 0;
for (int i = 0; i < n; i++) {
int L = 0, O = 0, V = 0, E = 0;
string temp = "";
temp = name + t_name[i];
for (int i = 0; i < temp.length(); i++) {
if (temp[i] == 'L') L++;
else if (temp[i] == 'O') O++;
else if (temp[i] == 'V') V++;
else if (temp[i] == 'E') E++;
}
// 각 L O V E 의 개수를 구한 후 우승 확률 구하기
int p;
p = ((L + O) * (L + V) * (L + E) * (O + V) * (O + E) * (V + E)) % 100;
if (max_value < p) {
max_value = p;
max_index = i;
}
}
// 모든 팀에 대한 반복이 끝난 후 우승확률이 가장 높은 팀 출력
// 대문자 출력
cout << t_name[max_index] << "";
}
728x90