알고리즘 문제풀이

팀 이름 정하기[백준 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;
}