뭐라도 배우면 기록하자
[알고리즘 문제풀이] 조교의 성적 매기기 본문
문제 출처: 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로 짜서 더 걸린걸까 위안을 삼아본다..)
'프로그래밍언어공부 > C' 카테고리의 다른 글
[알고리즘 문제풀이] 최빈수 구하기 (0) | 2019.01.01 |
---|---|
[알고리즘 문제풀이] View (0) | 2019.01.01 |
[알고리즘 문제풀이] 분수찾기 (0) | 2018.12.25 |
[알고리즘 문제풀이] 벌집 (0) | 2018.12.24 |
[C언어] chap28 도전 프로그래밍 4-5 (0) | 2018.04.25 |