뭐라도 배우면 기록하자

[알고리즘 문제풀이] 조교의 성적 매기기 본문

프로그래밍언어공부/C

[알고리즘 문제풀이] 조교의 성적 매기기

무의욕자 2019. 1. 6. 23:00

문제 출처: https://swexpertacademy.com  1983. 조교의 성적 매기기


내가 작성한 코드

#include <stdio.h>

#include <stdlib.h>


int main(void) {

int testCase;            


scanf("%d", &testCase);

for (int i = 0; i < testCase; i++) {

int studentNum, student, k = 0, grade = 0;    //studentNum: 제시되는 학생 수, student: 등급을 찾아야 하는 학생

scanf("%d %d", &studentNum, &student);

int * scores = (int *)malloc(sizeof(int)*studentNum * 3);  //input되는 중간/기말/과제 점수들

float * score = (float *)malloc(sizeof(float)*studentNum); // 학생 별 중간/기말/과제 종합 점수

for (int j = 0; j < studentNum * 3; j += 3) {

scanf("%d %d %d", &scores[j], &scores[j + 1], &scores[j + 2]);

score[k++] = (float)((float)scores[j] * 35 / 100 + (float)scores[j + 1] * 45 / 100 + (float)scores[j + 2] * 20 / 100);

}

for (int p = 0; p < studentNum; p++) {

if (score[p] > score[student - 1])    //학생 별 중간/기말/과제 종합 점수와 등급을 찾아야 하는 학생의 종합 점수를 비교함

grade++;    // 타학생의 점수가 높으면 등급을 찾아야 하는 학생의 grade변수 올림

}

if (grade / (studentNum / 10) % 10 == 0)    //등급별로 같은 비율로 나눠지기 때문에 Case의 학생 수 마다 등급 치환 로직

printf("#%d A+\n", i + 1);

else if (grade / (studentNum / 10) % 10 == 1)

printf("#%d A0\n", i + 1);

else if (grade / (studentNum / 10) % 10 == 2)

printf("#%d A-\n", i + 1);

else if (grade / (studentNum / 10) % 10 == 3)

printf("#%d B+\n", i + 1);

else if (grade / (studentNum / 10) % 10 == 4)

printf("#%d B0\n", i + 1);

else if (grade / (studentNum / 10) % 10 == 5)

printf("#%d B-\n", i + 1);

else if (grade / (studentNum / 10) % 10 == 6)

printf("#%d C+\n", i + 1);

else if (grade / (studentNum / 10) % 10 == 7)

printf("#%d C0\n", i + 1);

else if (grade / (studentNum / 10) % 10 == 8)

printf("#%d C-\n", i + 1);

else if (grade / (studentNum / 10) % 10 == 9)

printf("#%d D0\n", i + 1);


free(scores);

free(score);

}

return 0;

}


느낀점

종합점수를 구할 때 Float로 캐스팅을 하지 않고 int로 구했어서 몇몇 케이스에서 계속 에러가 났었다.. 계산 식을 보면 당연히 소숫점이 나와 float로 했어야 했는데 그것을 늦게 알아차려서 좀 시간이 허비됐다.

그리고 등급(A+, A0등)을 배열에 넣고 배열로 마지막 if else문을 대체하는 것 보기 깔끔한 코드가 되지 않을까 싶다.

정답률 60%가 넘는 문제 + D2난이도의 문제로 시간이 별로 안 걸릴 줄 알았는데 1시간 조금 안걸린 것 같다.. 갈 길이 아직도 멀었다..

(C++을 몰라서 C로 짜서 더 걸린걸까 위안을 삼아본다..)

Comments