1. 문제 상세
https://www.acmicpc.net/problem/25206
2. 문제 접근
20개 과목의 학점을 확인해 전공 평점을 계산하자.
전공 평점 계산을 위해 학점 X 과목 평점의 값들을 모두 더한 값을 저장할 변수와, 학점을 모두 더한 값을 저장 할 변수를 선언.
각각 t_grade1, t_ grade2 라 하자.
이 때, 변수를 정수형이 아닌 실수형으로 선언하고, 오차가 10-4 이하로 나오도록 float 이나 double 로 선언.
20개 과목의 학점을 입력받기 위해 반복문으로 20번 반복하도록 하자.
반복하며 학점을 입력받고 해당 과목이 P/F 과목이 아닌 경우 학점 X 과목 평점의 값을 현재 grade1 변수의 값에 더한다.
그리고 학점을 grade2 변수에 더한다.
위 과정에서 입력받은 등급에 따른 과목 평점의 값을 알기 위해 입력받은 등급인지 A, B, C, D 그리고 이 외(F 인 경우)인지 확인하고 각각의 경우 과목 평점을 4, 3, 2, 1, 0 으로 저장한다. 그리고 알파벳 뒤에 붙은 문자가 '+' 인 경우 0.5 를 더해준다.
이렇게 반복이 끝나 20종류의 과목 학점을 모두 입력받고, 각 변수에 더했다면 grade1 변수의 값을 grade2 변수의 값으로 나누고, 그 값을 출력한다.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
double grade, sub_grade, t_grade1 = 0, t_grade2 = 0;
string sub, g;
for(int i = 0; i < 20; i++) {
cin >> sub >> grade >> g;
if(g != "P") {
if(g[0] == 'A') sub_grade = 4;
else if(g[0] == 'B') sub_grade = 3;
else if(g[0] == 'C') sub_grade = 2;
else if(g[0] == 'D') sub_grade = 1;
else sub_grade = 0;
if(g[1] == '+') sub_grade += 0.5;
t_grade1 += grade * sub_grade;
t_grade2 += grade;
}
}
cout << t_grade1 / t_grade2;
}
실수형 변수 grade, sub_grade, t_grade1, t_grade2 를 선언, t_grade1, 2 를 0으로 초기화한다.
문자열 객체 sub, g 를 선언한다.
for문으로 i 가 0부터 20보다 작을 때 1씩 더하며 반복한다.
cin 으로 과목명(문자열), 학점(실수), 등급(문자열) 을 입력받아 각각 sub, grade, g 에 저장한다.
if문으로 g 가 "P" 가 아니라면, if 문으로 문자열 g 의 0번 인덱스의 값, 즉 맨 앞 문자가 'A' 라면 sub_grade 에 4를 저장한다.
else if문으로 문자열 g 의 0번 인덱스 값을 확인하여 'B' 인 경우 3, 'C' 인 경우 2, 'D' 인 경우 1, 그 외의 경우 0을 sub_grade 에 저장한다.
if문으로 문자열 g 의 1번 인덱스의 값, 두번째 문자가 '+' 라면 현재 sub_grade 변수의 값에 0.5 를 더한다.
t_grade1 에 grade 와 sub_grade 를 곱한 값을 더하고, t_grade2 에는 grade 의 값을 더한다.
모든 반복이 끝나면 t_grade1 을 t_grade2 로 나눈 값을 출력한다.
4. 성능 확인
5. 마무리
.
'백준 - 단계별로 풀어보기 > 심화 1' 카테고리의 다른 글
[백준] 1316번 : 그룹 단어 체커| C++ (0) | 2023.10.12 |
---|---|
[백준] 2941번 : 크로아티아 알파벳 | C++ (0) | 2023.10.11 |
[백준] 1157번 : 단어 공부 | C++ (1) | 2023.10.11 |
[백준] 10988번 : 팰린드롬인지 확인하기 | C++ (0) | 2023.10.11 |
[백준] 2444번 : 별 찍기 - 7 | C++ (0) | 2023.09.26 |