알고리즘 문제풀이
팀 이름 정하기[백준 1296]
wiojfe
2024. 7. 17. 10:19
https://www.acmicpc.net/problem/1296
문자열을 사용하여 단순 구현하면 해결 가능한 문제이다.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 문자열을 정렬하기 위한 비교 함수
int compare(const void *a, const void *b) {
return strcmp(*(const char **)a, *(const char **)b);
}
int main() {
char ms[101];
int n;
// ms 입력 받기
scanf("%s", ms);
// n 입력 받기
scanf("%d", &n);
// 문자열 배열을 동적으로 할당
char **li = (char **)malloc(n * sizeof(char *));
for (int i = 0; i < n; i++) {
li[i] = (char *)malloc(101 * sizeof(char));
scanf("%s", li[i]);
}
// 문자열 배열 정렬
qsort(li, n, sizeof(char *), compare);
int max_p = 0;
int max_i = 0;
for (int i = 0; i < n; i++) {
// 각 문자(L, O, V, E)의 개수를 세기
int L = 0, O = 0, V = 0, E = 0;
for (int j = 0; j < strlen(ms); j++) {
if (ms[j] == 'L') L++;
else if (ms[j] == 'O') O++;
else if (ms[j] == 'V') V++;
else if (ms[j] == 'E') E++;
}
for (int j = 0; j < strlen(li[i]); j++) {
if (li[i][j] == 'L') L++;
else if (li[i][j] == 'O') O++;
else if (li[i][j] == 'V') V++;
else if (li[i][j] == 'E') E++;
}
// p 계산
int p = ((L + O) * (L + V) * (L + E) * (O + V) * (O + E) * (V + E)) % 100;
// 최대 p 값과 그 인덱스 업데이트
if (max_p < p) {
max_p = p;
max_i = i;
}
}
// 결과 출력
printf("%s\n", li[max_i]);
// 동적 할당 해제
for (int i = 0; i < n; i++) {
free(li[i]);
}
free(li);
return 0;
}