백준 문제/문자열,누적합,구현
1296: 팀 이름 정하기
goldpig
2024. 3. 31. 21:52
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개가 주어졌을 때, 우승할 확률이 가장 높은 팀 이름을 구해보자. 확률이 가장 높은 팀이 여러가지인 경우 사전 순으로 가장 앞서는 팀 이름이 우승할 확률이 가장 높은 것이다.
핵심 아이디어
- 주어진 조건대로 구현하면 되는 문제다.
- 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 <algorithm>
using namespace std;
int max_value = 0;
int max_index;
string team_list[50];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
string name;
cin >> name;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> team_list[i];
}
sort(team_list, team_list + n);
for (int i = 0; i < n; i++) {
string temp = ""; // 이름 + 팀 이름 저장할 변수
int L = 0, O = 0, V = 0, E = 0;
temp = name + team_list[i];
for (int i = 0; i < temp.size(); i++) {
if (temp[i] == 'L') L++;
else if (temp[i] == 'O') O++;
else if (temp[i] == 'V') V++;
else if (temp[i] == 'E') E++;
}
if (max_value < ((L + O) * (L + V) * (L + E) * (O + V) * (O + E) * (V + E)) % 100) {
max_value = ((L + O) * (L + V) * (L + E) * (O + V) * (O + E) * (V + E)) % 100;
max_index = i;
}
}
cout << team_list[max_index] << "\n";
}
728x90