2010 프로야구 문제에 대한 질문입니다. JJackS [[problem:BASEBALL]] '승률 = 승수 / 경기수'로 정의하고 있습니다. 일반적으로 경기를 하게 되면, 승무패로 승점제를 도입하죠. 이 문제에서는 무승부나 패배를 하면 승률에는 동일한 결과를 줍니다. (ex) 9승 1무 0패 == 9승 0무 1패 승률 0.9 승률 0.9 그리고 4위 안에 응원팀이 존재하는지 결정할 때는 응원팀의 승률보다 높은팀이 3팀이하로 존재하면, 포스트시즌에 진출할 수 있다고 생각했습니다.(승률이 동률이어도, 카운트를 하지 않으니까요) 제가 생각한 것에 문제점이 있는지 궁금합니다. #include<stdio.h> //#include<stdlib.h> #include<string.h> typedef struct team{ char name[21]; int win; int draw; int defeat; double rank; }team; team team_data[8]; typedef struct game{ char team_a[21]; int index_a; char team_b[21]; int index_b; }game; game game_data[25]; int main(){ int case_num, i=0,j=0, m=0, n=0, k=0; int R, myteam_i; char myteam_name[21] = {0, }; scanf("%d", &case_num); while(i< case_num){ m=0; memset(myteam_name, 0, sizeof(myteam_name)); memset(team_data, 0, sizeof(team_data)); memset(game_data, 0, sizeof(game_data)); //입력 for(j=0;j<8;j++){ scanf("%s %d %d %d", team_data[j].name, &team_data[j].win, &team_data[j].draw, &team_data[j].defeat); if((team_data[j].win + team_data[j].draw + team_data[j].defeat) != 0){ team_data[j].rank = team_data[j].win / (team_data[j].win + team_data[j].draw + team_data[j].defeat); } else team_data[j].rank = 0; } scanf("%s", myteam_name); for(j=0;j<8;j++){ if(strcmp(myteam_name, team_data[j].name) == 0){ myteam_i = j; break; } } R=0; scanf("%d", &R); for(j=0;j<R;j++){ scanf("%s %s", game_data[j].team_a, game_data[j].team_b); for(k=0;k<8;k++){ if(strcmp(game_data[j].team_a, team_data[k].name) == 0){ game_data[j].index_a = k; } if(strcmp(game_data[j].team_b, team_data[k].name) == 0){ game_data[j].index_b = k; } } } // for(j=0;j<R;j++){ //응원팀 - 항상 이김 if(myteam_i == game_data[j].index_a){ team_data[myteam_i].win++; team_data[game_data[j].index_b].defeat++; } else if(myteam_i == game_data[j].index_b){ team_data[myteam_i].win++; team_data[game_data[j].index_a].defeat++; } //나머지 경우는 무승부 else{ team_data[game_data[j].index_a].draw++; team_data[game_data[j].index_b].draw++; } } //승률 다시 계산 for(j=0;j<8;j++){ if((team_data[j].win + team_data[j].draw + team_data[j].defeat) != 0){ team_data[j].rank = team_data[j].win / (team_data[j].win + team_data[j].draw + team_data[j].defeat); } else team_data[j].rank = 0; } //순위 결정. for(j=0;j<8;j++){ if(j == myteam_i) continue; if(team_data[j].rank > team_data[myteam_i].rank) m++; if(m >= 4){ printf("NO\n"); break; } } if(m < 4) printf("YES\n"); i++; } return 0; } 13년 전
2개의 댓글이 있습니다. JongMan 논리는 맞는것 같은데요. ^ rank를 구하는 나눗셈에 문제가 있지 안흥ㄹ까 생각해 봅니다. 13년 전 link JJackS 감사합니다. ^ float와 double이 사용하기가 애매하네요. 정확한 값을 계산하는게 아니여서 Int로 바꾸고 10000배정도 붙여주니 정상적으로 풀이가 되네요. 13년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
JJackS
[[problem:BASEBALL]]
'승률 = 승수 / 경기수'로 정의하고 있습니다.
일반적으로 경기를 하게 되면, 승무패로 승점제를 도입하죠.이 문제에서는 무승부나 패배를 하면 승률에는 동일한 결과를 줍니다.
(ex) 9승 1무 0패 == 9승 0무 1패
승률 0.9 승률 0.9
그리고 4위 안에 응원팀이 존재하는지 결정할 때는
응원팀의 승률보다 높은팀이 3팀이하로 존재하면, 포스트시즌에 진출할 수 있다고 생각했습니다.(승률이 동률이어도, 카운트를 하지 않으니까요)
제가 생각한 것에 문제점이 있는지 궁금합니다.
13년 전