소스코드
#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일 떄의 팀 이름을 출력하면 끝.
'solving > C, C++' 카테고리의 다른 글
[백준] 1373번 2진수 8진수 (0) | 2022.09.07 |
---|---|
[백준] 1356번 유진수 (숫자 배열로 받기, 배열에서 index 이동시키기) (0) | 2022.09.05 |
[백준] 1236번 성 지키기 (이차원 배열) (1) | 2022.09.02 |
[백준] 1032번 명령 프롬프트 (0) | 2022.09.01 |
[백준] 25177번 서강의 역사를 찾아서 (0) | 2022.09.01 |