사자자리

[C언어] 백준 1296번: 팀 이름 정하기 본문

C언어/C언어 문제

[C언어] 백준 1296번: 팀 이름 정하기

renne 2022. 7. 24. 16:00

https://www.acmicpc.net/problem/1296

 

1296번: 팀 이름 정하기

연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다. 미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다. 이환

www.acmicpc.net

#include <stdio.h>
#include <string.h>
int main(){
	char mine[21], team[50][22], result[21];
	int win[50]; 
	int l = 0, o = 0, v = 0, e = 0;
	int L, O, V, E;
	int n, max = -1;
	
	scanf("%s", mine);
	for (int j = 0; j < strlen(mine); j++){	//내 이름의 LOVE 개수 세기 
		if (mine[j] == 'L') l++;
		else if (mine[j] == 'O') o++;
		else if (mine[j] == 'V') v++;
		else if (mine[j] == 'E') e++;
	}
	
	scanf("%d", &n); 
	for (int i = 0; i < n; i++){
		scanf("%s", team[i]);
		L = l, O = o, V = v, E = e;
		
		for (int j = 0; j < strlen(team[i]); j++){	//팀 이름의 LOVE 개수 더하기 
			if (team[i][j] == 'L') L++;
			else if (team[i][j] == 'O') O++;
			else if (team[i][j] == 'V') V++;
			else if (team[i][j] == 'E') E++;
		}
		win[i] = ((L+O)*(L+V)*(L+E)*(O+V)*(O+E)*(V+E)) % 100;
	}
	
	for (int i = 0; i < n; i++){
		if (max < win[i]){	//우승 확률이 더 높을 경우  
			max = win[i];
			strcpy(result, team[i]);
		}
		else if (max == win[i]){	//우승 확률이 같을 경우  
			if (strcmp(result, team[i]) > 0){
				strcpy(result, team[i]);
			}
		}
	}
	
	printf("%s\n", result); 
	return 0;
}

 

확률을 구하는 공식에서 mod는 나머지 연산을 뜻한다. C언어에서 %연산자로 계산할 수 있다.

우승 확률을 계산하고 서로 비교하는 방법은 바로 떠올랐지만, 어려웠던 부분은 우승 확률이 같았을 때였다. 팀 이름을 알파벳 순서로 비교하기 위해서는 strcmp 함수가 필요했다. strcmp 함수에서 왼쪽의 알파벳 순서가 뒤에 있을 경우에 양수가 나오고, 반대의 경우엔 음수가, 같을 경우엔 0이 나오는 것을 이용했다.

Comments