목차
백준 단계별로 풀어보기
25.08.27
6단계: 심화 1
25206번: 너의 평점은
문제 링크 : https://www.acmicpc.net/problem/25206
문제 풀이
>> 문제를 풀기 위해 알아야 할 개념
- 백준에서 자주 보이는 절대오차 / 상대오차의 개념
1. 절대오차
: 절대오차가 x 이하면 정답 처리한다는 말은 실제 정답이 a라고 하고 내가 출력한 정답이 b라고 할 때, abs(b - a)의 값이 x이면 정답이라는 의미
ex) 절대오차 10^(-2) / 실제 정답 : 66.666667 / 내가 출력한 정답 : 66.6 --> 실제 답과의 절대오차는 0.066667 이 되기 때문에 절대오차가 '6 * 10^(-2)' 이상 차이나므로 틀린 것
2. 상대오차
: 절대오차를 실제 정답으로 나눈 값으로, 100을 곱해 백분율로 바꾸면 상대오차가 된다.
ex) 상대오차 10^(-1)까지 허용한다는 것은 10^(-1)에 100을 곱한 10%의 오차까지 허용한다는 말이다. 즉, 상대오차 10^(-2)는 1%의 오차까지 허용한다는 의미다.
※ float은 소수점 유효자리가 6자리까지, double은 소수점 유효자리가 15자리까지 표현된다. 따라서 10^(-2) 정도의 오차는 float으로 표현해도 상관없다.
※ 참고한 블로그
[PS][백준/1008] 절대오차와 상대오차
문제 1008번: A/B두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.www.acmicpc.net 절대오차와 상대오차이 문제에서 "실제 정답과 출력값의 절대오차 또는 상대오차가 10⁻⁹ 이
all-i-want.tistory.com
>> 풀이
- 문제에서 입력이 20줄에 걸쳐 과목명, 학점, 등급이 공백으로 구분되어 주어진다고 했으니, 반복문을 통해 20번 반복하여 문자열을 받고 공백을 기준으로 나눈다.
- 과목명은 필요없으니, 학점과 등급을 변수로 담는다. 이때, 등급이 P인 과목은 계산에서 제외되기 때문에 등급이 P일 때는 continue로 넘긴다.
- 전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값이므로, (학점 × 과목평점)을 담을 변수인 'sum', 학점의 총합을 담을 변수인 'totalCredits'를 선언하고 반복문에서 totalCredits에 학점을 더해준다.
- 과목평점은 string으로 정해져있으므로, switch문을 사용하여 해당하는 과목평점에 학점을 곱해서 sum에 더해준다.
- (학점 × 과목평점) / 학점의 총합을 출력하되, 절대 또는 상대오차가 10^(-4) 이하여야 하기 때문에 ToString을 사용하여 소수점 여섯째 자리까지 표기해준다.
정답 코드
class Backjoon
{
static void Main(string[] args)
{
float totalCredits = 0;
float sum = 0;
for (int i = 0; i < 20; i++)
{
string[] input = Console.ReadLine().Split();
float credit = float.Parse(input[1]);
string grade = input[2];
if (grade == "P") continue;
totalCredits += credit;
switch (grade)
{
case "A+":
sum += credit * 4.5f;
break;
case "A0":
sum += credit * 4.0f;
break;
case "B+":
sum += credit * 3.5f;
break;
case "B0":
sum += credit * 3.0f;
break;
case "C+":
sum += credit * 2.5f;
break;
case "C0":
sum += credit * 2.0f;
break;
case "D+":
sum += credit * 1.5f;
break;
case "D0":
sum += credit * 1.0f;
break;
case "F":
break;
default:
break;
}
}
Console.Write((sum / totalCredits).ToString("F6"));
}
}'Development > Baekjoon' 카테고리의 다른 글
| [C#] 2566번: 최댓값 (4) | 2025.08.29 |
|---|---|
| [C#] 2783번: 행렬 덧셈 (1) | 2025.08.28 |
| [C#] 1316번: 그룹 단어 체커 (0) | 2025.08.25 |
| [C#] 2941번: 크로아티아 알파벳 (0) | 2025.08.21 |
| [C#] 1157번: 단어 공부 (0) | 2025.08.20 |