백준 1546번 : 평균
- 문제
- 풀이방법
1. 첫 줄은 시험본 과목의 개수
2. 두 번째 줄은 시험본 과목의 성적
3. 성적 중 최댓값 구하기
4. (각 성적) / (최댓값) * 100을 계산한 성적의 평균 구하기
👉 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
if (n >= 1 && n <= 1000){
String sGrade = sc.nextLine();
String[] grade = sGrade.split(" ");
// 최댓값 찾기
int max = 0;
for (int i = 0; i < grade.length; i++) {
if(Integer.parseInt(grade[i]) > max){
max = Integer.parseInt(grade[i]);
}
}
// 평균구하기
Double sum = 0.0;
for (int i = 0; i < grade.length; i++) {
sum += (Double.parseDouble(grade[i]) / max * 100);
}
System.out.println(sum / grade.length);
}
}
}
✍ 해설
변수 n은 시험 본 과목의 개수,
변수 sGrade는 각 과목의 성적을 문자열로 받는다.
문자열 형태로 받은 변수 sGrade를 split메서드를 사용해 " "(띄어쓰기)기준으로 잘라 배열 grade에 담는다.
첫 번째 배열의 반복문 - String을 Integer로 형변환 한다음 값을 비교해 최댓값을 찾아 변수 max에 담는다.
두 번째 배열의 반복문으로 각 성적의 점수를 아래와 같이 계산 후 모두 더해 sum이라는 변수에 담는다.
점수 / max / * 100
마지막으로 평균을 출력한다.
😢 첫 번째 코드의 아쉬운 점
1. 변수 n과 변수 sGrade의 연관성이 없다.
2. 각 과목의 성적을 문자열로 받은 후 split메서드를 사용한 점
3. 변수 max와 변수 sum을 각각 반복문을 돌려서 값을 찾았는데, 이 부분은 조금 더 고민해 보면 더 간결하게 작성할 수 있을 것 같다.
1,2번에 대한 리뷰
-> 변수 n은 시험본 과목의 개수이므로 n의 숫자만큼 반복문을 돌려서 입력하는것이 더 효율적이다.
또한, 그렇게 값을 입력받으면 split메서드를 사용하지 않고도 배열에 담을 수 있어서 더 안정적인 코드가 된다.
3번에 대한 리뷰
-> 하나의 반복문 안에 최댓값을 찾고 각 과목의 합을 구한 후 출력할 때 한번의 계산을 하면,
코드가 더 간결해질 수 있다.
👍 수정한 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 시험 본 과목의 개수
int N = Integer.parseInt(sc.nextLine());
if (N >= 1 && N <= 1000){
int[] grade = new int[N]; // 각 과목의 성적
int max = 0; // 최댓값
int sum = 0; // 과목의 합
// 시험 본 과목의 개수만큼 성적을 입력받고 배열에 넣는다.
for(int i = 0; i < N; i++){
grade[i] = sc.nextInt();
}
// 성적의 최댓값과 합을 구한다.
for(int i = 0; i < grade.length; i++) {
// 최댓값 구하기
if(max < grade[i]){
max = grade[i];
}
// 과목의 합 구하기
sum += grade[i];
}
System.out.println(sum * 100.0 / max / N);
}
}
}
[출처 : https://www.acmicpc.net/problem/1546 ]
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 10988번 : 팰린드롬인지 확인하기 - JAVA (0) | 2023.12.06 |
---|---|
[백준] 11659번 : 구간 합 구하기 - JAVA (0) | 2023.12.04 |
[백준] 11720번 : 숫자의 합 - JAVA (2) | 2023.09.30 |