티스토리 뷰
영준이의 학급회장 코드
#include< iostream > using namespace std; int sum(int *arr, int num); int count(int *arr, int num); int main() { int student_num; cin >> student_num; //이차 배열의 동적할당 int **arr = new int *[student_num]; for (int i = 0; i < student_num;i++) { arr[i] = new int[3]; } for (int i = 0; i < student_num; i++) { for (int j = 0; j < 3; j++) { cin >> arr[i][j]; } } //학생수 만큼 후보자 수 만큼 동적할당 -> 각 배열에 어떤 점수를 받았는지 집어넣어줌. int *A_arr = new int[student_num]; int *B_arr = new int[student_num]; int *C_arr = new int[student_num]; for (int i = 0; i < student_num; i++) { A_arr[i] = arr[i][0]; B_arr[i] = arr[i][1]; C_arr[i] = arr[i][2]; } // X_total 변수에 각 후보의 총합 점수 대입 int A_total = sum(A_arr, student_num); int B_total = sum(B_arr, student_num); int C_total = sum(C_arr, student_num); //X_춧 변수에 각 후보의 3점을 받는 갯수 대입 int A_cnt = count(A_arr, student_num); int B_cnt = count(B_arr, student_num); int C_cnt = count(C_arr, student_num); //점수와 3점을 받은 개수를 체크 하기위해 3개짜리 배열에 총점과 갯수를 넣어줌. int check[3] = { A_total, B_total, C_total }; int check_cnt[3] = { A_cnt, B_cnt, C_cnt }; //제일큰 총합점수를 담아두는 top변수, 그 총합점수의 주소값+1(0번째 배열은 1번 후보이므로)을 담아주는 top_id변수. //top_id 변수가 0일경우 check_cnt[top_id-1] 에서 배열이 -1값이 되기 때문에 따로 담아두는 변수. int top; int top_id; int result_id = 1;//1로 초기화한다. // 맨 첫번째 후보가 최고 점수라고 가정을 한 후에 체크를 시작한다. top = check[0]; top_id = 1; //후보가 3명이므로 2번만 확인해주면된다. for (int i = 1; i < 3; i++) { //가장 큰 if 절은 총점수의 크기 비교. if (top < check[i]) { top = check[i]; top_id = i+1; } else if (top > check[i]) { } else if (top == check[i]) { //안에 들어있는 if 절은 점수가 같을 경우 각 후보가 받은 3점의 갯수로 판별하기위한 절. //top_id를 +1해주기 때문에(0,1,2 후보가 되므로) 배열주소는 -1을 해줘야한다. if (check_cnt[top_id-1]check_cnt[i]) { } // 총점과 3점을 받은 갯수가 모두 같을 때는 id값을 최근의 i값으로 받고 result_id변수에 0을 넣어준다. else { top = check[i]; top_id = i; result_id = 0; } } } //모두 같을때 0번 후보가 될 경우 if (result_id == 0) { cout << result_id << " " << top << endl; } //아닐때 else{ cout << top_id << " " << top << endl; } for (int i = 0; i < student_num; i++) { delete [] arr[i]; } return 0; } //총점을 구하는 함수 int sum(int *arr, int num) { int total = 0; for (int i = 0; i < num; i++) { total += arr[i]; } return total; } //3점의 갯수를 세주는 함수. int count(int *arr, int num) { int cnt = 0; for (int i = 0; i < num; i++) { if (arr[i] == 3) cnt++; } return cnt; }
</pre>
댓글