<div>우선 알고리즘 문제에 대한 링크입니다.</div> <div> </div> <div><a target="_blank" href="https://www.acmicpc.net/problem/11070" target="_blank">https://www.acmicpc.net/problem/11070</a></div> <div> </div> <div>코드가 길어 죄송합니다 최대한 세세하게 주석을 달아놓겠습니다.</div> <div>또 본래 표준입출력으로 해야하나 우선 파일입출력 형식으로 했습니다 (이것 때문에 오답처리 되는것은 아닌게</div> <div>파일입출력의 경우 정답이여도 런타임 에러가 발생하는데 이 코드는 아예 틀렸습니다 라는 오답문구가 나옵니다. ㅠㅠ)</div> <div> </div> <div>#include <stdio.h><br>#include <stdlib.h><br>#pragma warning(disable: 4996) // scanf 관련해서 발생하는 에러 C4996을 해소하기 위해 삽입했습니다</div> <div> </div> <div>int main()<br>{<br> FILE *fp = fopen("Input.txt", "r");<br> int d, i, j, k, l; // 반복문을 위한 변수<br> int T; // 총 테스트케이스 반복 횟수<br> int m, n, a, b, p, q; // m = 경기 수 / n = 팀 수 / a,b = 대결을 하는 두 팀 / p,q = 두 팀의 득점<br> int goal = 0; // 총 득점<br> int miss = 0; // 총 실점<br> int twogoal = 0; // 득점 제곱<br> int twomiss = 0; // 실점 제곱<br> int MAX = 0; // 최대 기대값<br> int MIN = 0; // 최소 기대값<br> int **score = NULL; // 득,실점이 들어갈 2차원 배열 동적할당<br> float *W = NULL; // 기대값이 들어갈 1차원 배열 동적할당</div> <div> </div> <div> if (fp == NULL)<br> {<br> printf("File Open Error.\n");<br> exit(1);<br> }</div> <div> fscanf(fp, "%d", &T);<br> <br> for (i = 0; i < T; i++)<br> {<br> fscanf(fp, "%d %d", &n, &m);</div> <div> score = (int **)malloc(sizeof(int *) * m);<br> score[0] = (int *)malloc(sizeof(int) * n*m);<br> W = (float *)malloc(sizeof(float) * n);</div> <div> </div> <div> for (d = 1; d < m; d++)<br> {<br> score[d] = score[d - 1] + n;<br> }</div> <div> </div> <div> for (d = 0; d < m; d++)<br> {<br> for (l = 0; l < 2; l++)<br> {<br> score[d][l] = 0;<br> }<br> }</div> <div> </div> <div> for (d = 0; d < n; d++)<br> {<br> W[d] = 0;<br> }</div> <div> </div> <div> for (j = 0; j < m; j++)<br> {<br> fscanf(fp, "%d %d %d %d", &a, &b, &p, &q);</div> <div> </div> <div> if ((a + b) > (m + n))<br> {<br> printf("파일 크기 에러.\n");<br> }</div> <div> </div> <div> score[a - 1][0] += p;<br> score[a - 1][1] += q;<br> score[b - 1][0] += q;<br> score[b - 1][1] += p;<br> }</div> <div> </div> <div> for (k = 0; k < n; k++)<br> {<br> goal += score[k][0];<br> miss += score[k][1];</div> <div> twogoal = goal*goal;<br> twomiss = miss*miss;</div> <div> </div> <div> if (goal == 0 && miss == 0)<br> {<br> W[k] = 0;<br> }<br> else<br> {<br> W[k] = (float)(1000 * twogoal / (twogoal + twomiss));<br> }<br> goal = 0;<br> miss = 0;<br> }</div> <div> </div> <div> MAX = (int)W[0];<br> MIN = (int)W[0];</div> <div> </div> <div> for (d = 1; d < n; d++)<br> {<br> if (MIN > W[d])<br> {<br> MIN = (int)W[d];<br> }<br> else if (MAX < W[d])<br> {<br> MAX = (int)W[d];<br> }<br> }</div> <div> </div> <div> printf("%d\n%d\n", MAX, MIN);</div> <div> MAX = 0;<br> MIN = 0;<br> }</div> <div> </div> <div> fclose(fp);<br> free(score[0]);<br> free(score);<br> free(W);</div> <div> return 0;<br>}</div> <div> </div> <div> </div> <div>문제에 대해서 어떻게 접근하고자 했냐면</div> <div> </div> <div>문제에서 입력예제를 보면 각각의 팀을 1번팀, 2번팀, 3번팀.. 등으로 지칭하는데</div> <div> </div> <div>가령 1번팀의 총 득점이 10, 총 실점이 5라면</div> <div>score[0][0] += 10</div> <div>score[0][1] += 5</div> <div> </div> <div>2번팀의 총 득점이 7, 실점이 4라면</div> <div>score[1][0] += 7</div> <div>score[1][1] += 4...</div> <div> </div> <div>이런 식으로 n번째 배열마다 2개의 득/실점을 활용하는 식으로 접근해봤습니다.</div> <div> </div> <div>이렇게 하니 입력예제를 변경해도 값은 제대로 뜨는데, 채점에서는 오답이라고 계속 뜨는게 도통 이유를 모르겠어서 올려봅니다.</div> <div> </div> <div>아예 싹 갈아엎어야 할 문제일까요? ㅠ.ㅠ </div> <div> </div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.