728x90
반응형
https://www.acmicpc.net/problem/1296
푸는데 나름 재밌는 문제였어서 풀이를 올리려 합니다.
접근 아이디어는 다음과 같습니다.
1) vector<pair<int,string>>를 통해 (이길 확률, 팀명)을 저장 받습니다. 또한 loveArry를 통해 LOVE 순서대로 개수를 카운팅 한다.
2) LOVE를 개수를 연두 이름과 팀명을 받아 카운팅 해주는 CountLove 함수를 선언한다.
3) 카운팅 된 값을 기준으로 확률을 연산하여 pair의 first값에 해당 팀명에 맞춰 저장한다
4) 해당 팀명과 이길 확률 계산이 끝났으면 다음 팀 계산을 위해 fill(arr, arr+n, 0)을 통해 love를 카운팅한 배열을 초기화
#include<iostream>
#include<vector>
#include<algorithm>
#define FastIO ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL);
using namespace std;
int loveArry[4] = { 0, }; // 순서대로 LOVE 개수
void CountLove(string name, string teamName)
{
for (int i = 0; i < name.size(); i++)
{
switch (name[i])
{
case 'L':
loveArry[0]++;
break;
case 'O':
loveArry[1]++;
break;
case 'V':
loveArry[2]++;
break;
case 'E':
loveArry[3]++;
break;
}
}
for (int i = 0; i < teamName.size(); i++)
{
switch (teamName[i])
{
case 'L':
loveArry[0]++;
break;
case 'O':
loveArry[1]++;
break;
case 'V':
loveArry[2]++;
break;
case 'E':
loveArry[3]++;
break;
}
}
}
int CalWinPercent()
{
return (loveArry[0] + loveArry[1]) * (loveArry[0] + loveArry[2]) * (loveArry[0] + loveArry[3]) * (loveArry[1] + loveArry[2]) * (loveArry[1] + loveArry[3]) * (loveArry[2] + loveArry[3]) % 100;
}
bool Compare(const pair<int, string>& a, const pair<int, string>& b)
{
if (a.first == b.first)
return a.second < b.second;
return a.first > b.first;
}
int main(void)
{
FastIO;
int N = 0; // 팀 이름 후보 N개
string name;
cin >> name;
cin >> N;
vector<pair<int, string>> team;
for (int i = 0; i < N; i++)
{
string input;
cin >> input;
team.push_back(make_pair(-1, input));
}
for (int i = 0; i < N; i++)
{
CountLove(name, team[i].second);
team[i].first = CalWinPercent();
fill(loveArry, loveArry + 4, 0);
}
sort(team.begin(), team.end(), Compare);
cout << team[0].second << "\n";
return 0;
}
728x90
반응형
'알고리즘 (C++)' 카테고리의 다른 글
[백준]17388번: 와글와글 숭고한 (0) | 2024.01.27 |
---|---|
[백준]2325번: 자료구조는 정말 최고 (0) | 2023.12.22 |
[백준]25497번: 기술 연계마스터 임스 (0) | 2023.12.06 |
[백준]2018: 수들의 합 5 (0) | 2023.12.05 |
[백준]11501번: 주식 (0) | 2023.11.27 |