티끌모아 태산

1296: 팀 이름 정하기 본문

백준 문제/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

'백준 문제 > LG전자 준비' 카테고리의 다른 글

⭐⭐2559: 수열  (0) 2024.04.23
⭐1463: 1로 만들기  (0) 2024.04.06