daeinki   7년 전

3명의 반장 후보가 받은 점수로 내림 차순 정렬하여

1, 2번 후보에 대해서만 비교 했습니다.


종합 점수가 같은 경우 리커시브하게 3점을 받은 횟수가 많은 후보를 리턴하고 이것도

같으면 2점을... 아무리 입력값을 바꿔가며 돌려봐도 다 정답으로 나오는데

제출하면 틀리다고 나오네요. 어디가 잘못되었을까요? ㅠㅠ

zlzmsrhak   7년 전

3명이 전부 다 같은 점수이고, 이것을 정렬했는데 우연히 3번 후보가 3점을 더 많이 받아 1등인 경우 제대로 된 답을 출력하지 않을 것 같습니다.

daeinki   7년 전

정말 그렇네요.

아래 TC의 경우 기존 코드는 3 8이 아닌 0 8이 출력됩니다.

4
3 3 3
1 1 3
2 2 1
2 2 1


그래서 정렬하기 전에 득표수가 모두 같은 경우 3점을 받은 횟수로 정렬하도록 조건을

추가 하였습니다. (0점은 줄수 없으므로 2점 이하 받은 횟수는 고려할 필요 없음 - 혹시나 해서 1점 횟수까지 고려해 보았음)

if (dd[1].total == dd[2].total && dd[1].total == dd[3].total)
          sort_f(3);
 else
          sort();


이렇게 했더니 3 8로 출력되네요.

하지만 여전히 fail. ㅜㅜ


TC만 충분하다면 쉽게 잡을 수 있을거 같은데 TC없이 모든 예외 경우를

생각하기가 쉽지 않네요.

도움 감사드립니다.

zlzmsrhak   7년 전

recursive 리턴 값은 1 또는 2가 되어야 할 것 같습니다. 

daeinki   7년 전

d1과 d2가 같은 경우는 회장을 결정하지 못하는 것이라서 0을과 max값을 출력해야 하지 않나요?

zlzmsrhak   7년 전

아 제 말은 그러니까 recursive 리턴값이 dd 배열의 인덱스 값으로 사용되기 때문에 직접 num값을 리턴하면 문제가 생긴다는 말이었어요

댓글을 작성하려면 로그인해야 합니다.