티스토리 뷰





영준이의 학급회장 코드

#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>



댓글
«   2024/05   »
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
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크