-
[백준 1296] 팀이름 정하기 c++Algorithm/BOJ 2021. 12. 5. 15:16
https://www.acmicpc.net/problem/1296
문제
연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다. 미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다.
이환이가 만든 공식은 사용하려면 먼저 다음 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보다 작거나 같은 자연수이다.
출력
첫째 줄에 우승할 확률이 가장 높은 팀 이름을 출력한다.
풀이
- 연두 이름에 'L' , 'O' , 'V' , 'E', 문자열 개수를 담는 int 배열
- 팀 이름에 'L' , 'O' , 'V' , 'E', 문자열 개수를 담는 int 배열 생성
- 배열의 총 길이는 4로 인덱스 0 => 'L'의 개수, 인덱스 1 => 'O'의 개수, 인덱스 2 => 'V'의 개수, 인덱스 3 => 'E'의 개수
- 두 배열의 각 인덱스를 더한 뒤 이환이가 만든 공식으로 확률 값 구하기
#include "stdio.h" #include "string.h" // 문자열에 있는 'L' ,'O', 'V' ,'E' 개수 카운트 void countLoveCharacter(char name[], int love[4]) { for (int i = 0; name[i] != 0; i++) { if (name[i] == 'L') { love[0]++; continue; } if (name[i] == 'O') { love[1]++; continue; } if (name[i] == 'V') { love[2]++; continue; } if (name[i] == 'E') { love[3]++; continue; } } } int main(void) { char name[21], team[21], answer[21]; int n; int love[4] = {0}; // 연두 이름에 있는 'L','O','V' ,'E' 개수 scanf("%s", name); scanf("%d", &n); countLoveCharacter(name, love); // 'L','O','V','E' 카운트 세기 int max = -1; while (n--) { scanf("%s", team); int love2[4] = {0}; // 팀 이름에 있는 'L','O','V' ,'E' 개수 countLoveCharacter(team, love2); // 'L','O','V','E' 카운트 세기 love2[0] += love[0]; // 연두와 팀이름에 있는 'L'의 총 개수 love2[1] += love[1]; // 연두와 팀이름에 있는 'O'의 총 개수 love2[2] += love[2]; // 연두와 팀이름에 있는 'V'의 총 개수 love2[3] += love[3]; // 연두와 팀이름에 있는 'E'의 총 개수 int percentage = 1; // 이환이가 만든 공식 for (int i = 0; i < 3; i++) { for (int j = i + 1; j < 4; j++) { percentage *= (love2[i] + love2[j]); } } percentage %= 100; if (percentage > max) { // 확률이 제일 높으면 max 값 갱신 max = percentage; strcpy(answer, team); // answer에 해당 팀 이름 저장 } else if (percentage == max) { // 확률 값이 같으면 사전 순으로 비교 if (strcmp(answer, team) > 0) { strcpy(answer, team); // 사전 순으로 앞에 오는 팀이름 저장 } } } printf("%s", answer); }
'Algorithm > BOJ' 카테고리의 다른 글
[백준 13144] List of Unique Numbers cpp (0) 2022.03.01 [백준 14248 ] 점프 점프 java (0) 2021.10.22 [백준 2535] - 아시아 정보올림피아드 java (0) 2021.10.18 [백준-10866] 덱 - java (0) 2021.06.30 [백준 - 10809] - 알파벳 찾기 (java) (0) 2021.05.17