촉촉한초코칩
[백준] 25206(너의 평점은) c언어 본문
문제
인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다!
치훈이의 전공평점을 계산해주는 프로그램을 작성해보자.
전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이다.
인하대학교 컴퓨터공학과의 등급에 따른 과목평점은 다음 표와 같다.
A+ | 4.5 |
A0 | 4.0 |
B+ | 3.5 |
B0 | 3.0 |
C+ | 2.5 |
C0 | 2.0 |
D+ | 1.5 |
D0 | 1.0 |
F | 0.0 |
P/F 과목의 경우 등급이 P또는 F로 표시되는데, 등급이 P인 과목은 계산에서 제외해야 한다.
과연 치훈이는 무사히 졸업할 수 있을까?
입력
20줄에 걸쳐 치훈이가 수강한 전공과목의 과목명, 학점, 등급이 공백으로 구분되어 주어진다.
출력
치훈이의 전공평점을 출력한다.
정답과의 절대오차 또는 상대오차가 10−4 이하이면 정답으로 인정한다.
#include <stdio.h>
#include <string.h>
typedef struct {
char name[50];
float score;
char s_grade[10];
} class;
typedef struct {
char s_grade[10];
float score;
} grade;
int main(void) {
class c[20] = {};
float g_sum = 0.0, sum = 0.0;
grade g[] = {
{"A+", 4.5},
{"A0", 4.0},
{"B+", 3.5},
{"B0", 3.0},
{"C+", 2.5},
{"C0", 2.0},
{"D+", 1.5},
{"D0", 1.0},
{"F", 0.0}
};
for(int i=0; i<20; i++) {
scanf("%s %f %s", &c[i].name, &c[i].score, &c[i].s_grade);
if(strcmp(c[i].s_grade, "P")==0 || strcmp(c[i].s_grade, "F")==0)
continue;
else
g_sum += c[i].score;
}
//학점 = (c->score * g->score) / g_sum
for(int i=0; i<20; i++) {
for(int j=0; j<9; j++) {
if(strcmp(c[i].s_grade, g[j].s_grade)==0) {
sum = sum + (c[i].score * g[j].score);
break;
} else if(strcmp(c[i].s_grade, "P")==0 || strcmp(c[i].s_grade, "F")==0)
continue;
}
}
sum /= g_sum;
printf("%f\n", sum);
return 0;
}
구조체 사용이 편할 것 같아서 입력받는 과목이랑, 학점별 평점을 따로 선언했는데.....
음 자꾸 틀렸다고 나온다.
보니까 첫번째 예제는 맞게 잘 나오는데 두번째는 nan으로 나온다.
검색해보니 학점별 평점은 따로 구조체를 사용하지 않고 계산하길래 다시 코드를 짰다....
그래도 내가 짠 코드가 계속 틀렸다고 나오길래... 다시 천천히 봤는데....
#include <stdio.h>
#include <string.h>
typedef struct {
char name[50];
float score;
char s_grade[10];
} class;
typedef struct {
char s_grade[10];
float score;
} grade;
int main(void) {
class c[20] = {};
float g_sum = 0.0, sum = 0.0;
grade g[] = {
{"A+", 4.5},
{"A0", 4.0},
{"B+", 3.5},
{"B0", 3.0},
{"C+", 2.5},
{"C0", 2.0},
{"D+", 1.5},
{"D0", 1.0},
{"F", 0.0}
};
for(int i=0; i<20; i++) {
scanf("%s %f %s", &c[i].name, &c[i].score, &c[i].s_grade);
if(strcmp(c[i].s_grade, "P")==0)
continue;
else
g_sum += c[i].score;
}
//학점 = (c->score * g->score) / g_sum
for(int i=0; i<20; i++) {
for(int j=0; j<9; j++) {
if(strcmp(c[i].s_grade, g[j].s_grade)==0) {
sum = sum + (c[i].score * g[j].score);
break;
} else if(strcmp(c[i].s_grade, "P")==0)
continue;
}
}
sum /= g_sum;
printf("%f\n", sum);
return 0;
}
차이점 찾아보실분...ㅋㅋㅋㅋ
F에 대해서도 계산을 해야되더라,,,,,,,,,, else if문에서 F continue 해주는 부분만 빼니까 성공했다!!
'Algorithm' 카테고리의 다른 글
[백준] 1157(단어 공부) c언어 (0) | 2023.10.28 |
---|---|
[백준] 10809(알파벳 찾기) c언어 (0) | 2023.10.22 |
[백준] 11650(좌표 정렬하기) c언어 (0) | 2023.07.16 |
[백준] 11653(소인수분해) c언어 (0) | 2023.07.09 |
[백준] 10988(팰린드롬인지 확인하기) c언어 (0) | 2023.07.09 |