소스코드

#include <stdio.h>
#include <string.h>

int main(){
	char name[21];
	int a, i, j;
	scanf("%s", &name);
	scanf("%d", &a);
	
	int namelen = strlen(name);
	int nameL = 0, nameO = 0, nameV = 0, nameE = 0;
	for (i=0; i<namelen; i++){
		if (name[i] == 'L') nameL++;
		if (name[i] == 'O') nameO++;
		if (name[i] == 'V') nameV++;
		if (name[i] == 'E') nameE++;
	}
	char team[a][21];
	for (i=0; i<a; i++){
		scanf("%s", team[i]);
	} 
	int teamlen;
	int totalL, totalO, totalV, totalE;
	int ans[a];
	for (i=0; i<a; i++){
		teamlen = strlen(team[i]);
		totalL = nameL, totalO = nameO, totalV = nameV, totalE = nameE;
		for(j=0; j<teamlen; j++){
			if(team[i][j] == 'L') totalL++;
			if(team[i][j] == 'O') totalO++;
			if(team[i][j] == 'V') totalV++;
			if(team[i][j] == 'E') totalE++;
		}
		ans[i] = ((totalL+totalO)*(totalL+totalV)*(totalL+totalE)*(totalO+totalV)*(totalO+totalE)*(totalV+totalE))%100;
	}
	
	int maxindex = 0, maxans = 0;	
	for (i=0; i<a; i++){
		if (maxans < ans[i]){
			maxans = ans[i];
			maxindex = i;
		}
	} 
	for (i=0; i<a; i++){
		if (maxans == ans[i]&&maxindex!=i){
			if (strcmp(team[maxindex],team[i]) > 0) maxindex = i;
		}
	} 
	
	printf("%s", team[maxindex]); 
}

해설

조금 복잡하게 푼 것 같다.. 변수가 너무 많음

우선 name을 받아 이름에서 각각 L, O, V, E의 개수를 변수에 저장.

그리고 team을 받아 이차원 배열에 저장하고, for문을 이용해 각각의 팀 이름일 때의 ans (계산결과) 를 얻어 배열에 저장한다.

이 값이 최대가 될 때의 index를 maxindex, 그 값을 maxans라고 설정하고, for문을 돌려 최댓값을 찾는다.

최댓값을 찾았으면, 그 때의 값을 다른 값과 비교해 같은 것이 있으면 사전 순서가 빠른 것을 maxindex로 바꾸어 준다.

이 때 strcmp를 사용했다. strcmp (a, b) 값이 양수이면 a가 b보다 사전 순서대로 뒤에 있는 것이다. 따라서 이 때 바꾸어 준다. 

maxindex일 떄의 팀 이름을 출력하면 끝.

복사했습니다!