DY N DY
실력키우기 나는 학급회장이다. (투표) (C++) 본문
2460 : 나는 학급회장이다.(투표)
제한시간: 1000 ms 메모리제한: 32 MB
해결횟수: 1082 회 시도횟수: 4221 회
N명의 학생들이 모인 초등학교 반에서 학급회장 선거를 하려고 한다. 그 중 3명이 회장후보로 나왔고, 이들에 대한 선호도를 N명의 학생들 각각에게 적어내도록 하였다. 세 명의 후보는 후보 1번, 후보 2번, 후보 3번이라 한다.
모든 학생은 3명의 후보 중에서 가장 선호하는 후보에게는 3점, 두 번째로 선호하는 후보에게는 2점, 가장 선호하지 않는 후보에게는 1점을 주어야 한다. 3명의 후보에 대한 한 학생의 선호 점수는 모두 다르며, 1점, 2점, 3점이 정확히 한 번씩 나타나야 한다.
후보의 최종 점수는 학생들로부터 받은 자신의 선호도 점수를 모두 더한 값이 된다. 그러면 3명의 후보 중 가장 큰 점수를 받은 후보가 회장으로 결정된다. 단, 점수가 가장 큰 후보가 여러 명인 경우에는 3점을 더 많이 받은 후보를 회장으로 결정하고, 3점을 받은 횟수가 같은 경우에는 2점을 더 많이 받은 후보를 회장으로 결정한다. 그러나 3점과 2점을 받은 횟수가 모두 동일하면, 1점을 받은 횟수도 같을 수밖에 없어 회장을 결정하지 못하게 된다.
여러분은 선호도 투표를 통해 얻은 세 후보의 점수를 계산한 후, 유일하게 회장이 결정되는 경우에는 회장으로 결정된 후보의 번호(1, 2, 3 중 한 번호)와 최고 점수를 출력하고, 회장을 결정하지 못하는 경우에는 번호 0과 최고 점수를 출력하는 프로그램을 작성하시오.
[Copy]6 3 1 2 2 3 1 3 1 2 1 2 3 3 1 2 1 2 3 | [Copy]1 13 |
[Copy]6 1 2 3 3 1 2 2 3 1 1 2 3 3 1 2 2 3 1 | [Copy]0 12 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | /************************************************************** Problem: 2460 User: a132034 Language: C++ Result: Success Time:1 ms Memory:1740 kb ****************************************************************/ #include <iostream> using namespace std; int main() { int N; int ** pps; cin >> N; pps = new int *[N + 3]; // N번째는 3점을 받은 횟수, N+1번째는 2점을 받은 횟수, N+2번째는 점수합 for (int i = 0; i < N + 3; ++i) pps[i] = new int[3]; for (int i = 0; i < N + 3; ++i) { for (int j = 0; j < 3;++j) { pps[i][j] = 0; } } for (int i = 0; i < N; ++i) { for (int j = 0; j < 3; ++j) { cin >> pps[i][j]; pps[N + 2][j] += pps[i][j]; if (pps[i][j] == 3) pps[N][j]++; else if (pps[i][j] == 2) pps[N + 1][j]++; } } if (pps[N + 2][0] > pps[N + 2][1] && pps[N + 2][0] > pps[N + 2][2]) { //1이 가장 큰 경우 cout << 1 << " " << pps[N + 2][0]; } else if (pps[N + 2][1] > pps[N + 2][0] && pps[N + 2][1] > pps[N + 2][2]) { //2가 가장 큰 경우 cout << 2 << " " << pps[N + 2][1]; } else if (pps[N + 2][2] > pps[N + 2][0] && pps[N + 2][2] > pps[N + 2][1]) { //3이 가장 큰 경우 cout << 3 << " " << pps[N + 2][2]; } else if (pps[N + 2][0] == pps[N + 2][1] && pps[N + 2][0] >= pps[N + 2][2]) { //1,2가 동일하고 큰 수인 경우 if (pps[N][0] > pps[N][1]) cout << 1 << " " << pps[N + 2][0]; else if (pps[N][1] > pps[N][0]) cout << 2 << " " << pps[N + 2][1]; else { if(pps[N+1][0] > pps[N+1][1]) cout << 1 << " " << pps[N + 2][0]; else if(pps[N + 1][0] < pps[N + 1][1]) cout << 2 << " " << pps[N + 2][1]; else cout << 0 << " " << pps[N + 2][0]; } } else if (pps[N + 2][0] == pps[N + 2][2] && pps[N + 2][0] >= pps[N + 2][1]) { //1,3이 동일하고 큰 수인 경우 if (pps[N][0] > pps[N][2]) cout << 1 << " " << pps[N + 2][0]; else if (pps[N][2] < pps[N][0]) cout << 3 << " " << pps[N + 2][2]; else { if(pps[N+1][0] > pps[N+1][2]) cout << 1 << " " << pps[N + 2][0]; else if(pps[N+1][2] > pps[N+1][0]) cout << 3 << " " << pps[N + 2][2]; else cout << 0 << " " << pps[N + 2][0]; } } else if (pps[N + 2][1] == pps[N + 2][2] && pps[N + 2][1] >= pps[N + 2][0]) { //2,3이 동일하고 큰 수인 경우 if (pps[N][1] > pps[N][2]) cout << 2 << " " << pps[N + 2][1]; else if (pps[N][1] < pps[N][2]) cout << 3 << " " << pps[N + 2][2]; else { if (pps[N + 1][1] > pps[N + 1][2]) cout << 2 << " " << pps[N + 2][1]; else if (pps[N + 1][2] > pps[N + 1][1]) cout << 3 << " " << pps[N + 2][2]; else cout << 0 << " " << pps[N + 2][2]; } } else { cout << 0 << " " << pps[N + 2][0]; } return 0; } | cs |
정말 단순하게 생각했다.
기존에 1~3번 학생의 점수를 저장할 배열을 만들 때, 따로 변수선언을 안하고 3점갯수, 2점갯수, 총점을 저장할 배열을 추가로 만들어 주었고,
입력받는 동시에 각각을 계산해 주었다.
입력이 끝난 후에는 1. 1~3이 유일하게 가장 클 경우 (가장 간단)
2. 두가지 이상이 동일할 경우
두가지로 나누어서 1번의 경우에는 간단히 출력하였고, 2번의 경우에는 3의 갯수와 2의 갯수를 확인하여 출력하였다.
더 짧게도 가능할 것 같은데 너무 의식의 흐름대로 푼 것 같기도 하다..
'PARK > ALGORITHM' 카테고리의 다른 글
실력키우기 주사위던지기2(C++) (0) | 2016.08.07 |
---|---|
실력키우기 떡 먹는 호랑이(C++) (0) | 2016.08.06 |
실력키우기 단어세기(C++) (0) | 2016.06.30 |
기초다지기 함수3-자가진단4(C++) (0) | 2016.06.30 |
기초다지기 함수3-형성평가3(C++) (1) | 2016.06.30 |