글에 개요
백준 알고리즘 10984번 "내 학점을 구해줘" 문제입니다.
백준 알고리즘 분류에서 '구현'에 있는 문제입니다.
이 문제는 Math.round 함수를 통한 소수점 n번째 자리에서 반올림하는 것을 익히기 위한 문제였습니다.
[백준 10984] 내 학점을 구해줘: https://www.acmicpc.net/problem/10984
참고할 글
http://brenden.tistory.com/40 ([백준 2577] 숫자의 개수 - 구현 문제)
http://brenden.tistory.com/41 ([백준 2839] 설탕 배달 - 구현 문제)
http://brenden.tistory.com/42 ([백준 10798] 세로읽기 - 구현 문제)
http://brenden.tistory.com/44 ([백준 1764] 듣보잡 - 구현 문제)
http://brenden.tistory.com/46 ([백준 2563] 색종이 - 구현 문제)
핵심 내용
- Math.round() 적용한 경우
- 소수점 첫째자리에서 반올림하여 정수로 만들어주는 함수
1 2 3 4 5 6 7 8 9 | public class MathRoundTest { public static void main(String[] args) { double e = 2.71828; // 6line 결과로 '3'이 출력된다. System.out.println(Math.round(e)); } } | cs |
- Math.round() 소수점 둘째자리에서 반올림한 경우
1 2 3 4 5 6 7 8 9 | public class MathRoundTest { public static void main(String[] args) { double e = 2.71828; // 6line 결과로 '2.7'이 출력된다. System.out.println(Math.round(e * 10) / 10.0); } } | cs |
- Math.round() 소수점 n번째자리까지 남기고자 할 때의 코드(= n+1번째 자리에서 반올림한다.)
1 2 3 4 5 6 7 8 9 10 11 12 | public class MathRoundTest { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //n번째 자리까지 소수점을 나타내고자 한다. int n = sc.nextInt(); double m = Math.pow(10.0, n); double e = 2.71828; System.out.println(Math.round(e*m)/m); } } | cs |
위의 3가지 예시를 보시게되시면 쉽게 이해가 가능할 것입니다.
해결 방법
- 총학점의 수(gradeSum)와 학점의 총합(scoreSum)을 초기화해준다. (double형을 사용했습니다.)
- Math.round(scoreSum*10/gradeSum)/10.0 이 부분처럼 사용하면 소수점 한 자리까지 남게됩니다.
해결한 코드
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Scanner; | |
public class Main { | |
public static void main(String[] args) { | |
Scanner sc = new Scanner(System.in); | |
int n = sc.nextInt(); | |
while(n-- > 0) { | |
int m = sc.nextInt(); | |
int gradeSum = 0; | |
float scoreSum = 0; | |
for(int i = 0; i < m; i++) { | |
int a = sc.nextInt(); | |
double b = sc.nextDouble(); | |
gradeSum += a; | |
scoreSum += a * b; | |
} | |
System.out.println(gradeSum + " " + Math.round(scoreSum*10/gradeSum)/10.0); | |
} | |
} | |
} |
백준 참고 내용
내 학점을 구해줘 성공
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 256 MB | 1881 | 1170 | 1102 | 63.736% |
문제
게으른 근우는 열심히 놀다가 문득, 자신의 학점 평균이 얼마일지 궁금해졌다. 학사시스템도 들어가기 귀찮아하는 근우를 위해 구해주도록 하자.
입력
첫 번째 줄에 학기의 수 T가 주어진다. 두 번째 줄부터 T개 학기에 대한 정보가 주어진다.
각 학기에 대한 정보는 다음과 같이 구성되어 있다. 첫 번째 줄에 들었던 과목의 수 N이 주어지고, 다음 N개 줄에 걸쳐서 N개 과목들의 학점 C와 성적 G가 주어진다. (1 ≤ N ≤ 10, 1 ≤ C ≤ 6의 정수. G는 0과 x-0.3, x, x+0.3 (x=1, 2, 3, 4) 중 하나로 주어진다.)
출력
각 학기에 대해 근우의 총 학점과 평점(GPA)을 출력한다. 평점은 소수점 아래 두 번째 자리에서 반올림한다.
예제 입력 1
2 4 3 4.3 2 2.0 4 0.0 2 4.0 3 4 0.0 4 0.0 3 0.0
예제 출력 1
11 2.3 11 0.0
예제 입력 2
2 4 3 4.3 2 2 4 0.0 2 4.0 3 4 0.0 4 0 3 0
예제 출력 2
11 2.3 11 0.0
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 2935] 소음 (0) | 2018.05.20 |
---|---|
[백준 8979] 올림픽 (0) | 2018.05.18 |
[백준 4673] 셀프 넘버 (0) | 2018.05.10 |
[백준 6588] 골드바흐의 추측 (0) | 2018.05.10 |
[백준 4948] 베르트랑 공준 (0) | 2018.05.10 |