본문 바로가기
프로그래밍/백준 문제 풀이(자바)

백준 평균 문제 자바 답/해설(1546번 문제)

by 리드민 2021. 11. 7.
반응형

[1] 백준 카테고리
단계별로 풀어보기

1차원 배열

5단계 1546번 문제

평균

링크

https://www.acmicpc.net/problem/1546

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

 

[2] 문제

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
1. 입력

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

2. 출력

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

3. 예제 입력 1
3

40 80 60

4. 예제 출력 1

75.0

5. 예제 입력 2

3

10 20 30

6. 예제 출력 2

66.666667

7. 예제 입력 3

4

1 100 100 100

8. 예제 출력 3

75.25

9. 예제 입력 4

5

1 2 4 8 16

10. 예제 출력 4

38.75

11. 예제 입력 5

2

3 10

12. 예제 출력 5

65.0

 

 

[3] 정답

1. 정답 해설 포함

import java.util.Scanner;
// Scanner 사용을 위해서 java.util.Scanner 클래스를 import 한다.

public class Main {
// Main class를 접근제어자 public으로 선언한다.
	public static void main(String[] args) {
	// main 메소드를 접근제어자 public, 메모리에 상주하게, 반환값이 없이 선언한다.

		Scanner sc = new Scanner(System.in);
		// Scanner 객체 sc를 선언한다.
		
		int a = sc.nextInt();
		// 값을 입력받아 int형 변수 a에 저장한다.
		double sum=0;
		// double형 변수 sum를 선언하고 0으로 초기화한다.
		double[] arr = new double[a];
		// double형 배열 arr를 변수 a값 만큼의 길이로 선언한다.
		double[] arr2 = new double[a];
		// double형 배열 arr2를 변수 a값 만큼의 길이로 선언한다.
		double effort=0;
		// double 형 변수 effort를 선언하고 값을 0으로 초기화한다.
		for(int i=0; i<arr.length; i++)
		// for문을 선언한다. 총 arr 배열의 길이만큼 실행된다.
		{
			arr[i] = sc.nextInt();
			// 값을 입력받아 배열 arr[i]에 저장한다.
		}
		
		double max=arr[0];
		// 변수 arr[0]값을 double형 변수 max에 저장한다.
		
		for(int i=0; i<a; i++)
		// for을 선언한다. 변수 a에 저장된 값만큼 실행되게된다.
		{
			if(arr[i]>max) {
			// arr[i]>max 조건에서 안에 있는 코드가 실행된다.
				max = arr[i];
				// 변수 arr[i]에 저장된 값을 변수 max에 저장한다.
			}
		}
		
		for(int i=0; i<arr2.length; i++)
		// for문을 선언한다. arr2 배열의 길이만큼 실행되게 된다.
		{
			arr2[i] = (arr[i]/max)*100;
			// (arr[i]/max)*100의 값을 arr2[i]에 저장한다.
		}

		for(int i=0; i<arr2.length; i++)
		// for문을 선언한다.
		{
			sum += arr2[i];
			// sum+arr2[i]값을 변수 sum에 저장한다.
		}
		
		effort=sum/a;
		// sum/a를 연산한 값을 변수 effort에 저장한다.
		System.out.print(effort);
		// 변수 effort에 저장된 값을 출력한다.
	}
}

 

2. 정답 해설 미포함

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		int a = sc.nextInt();
		double sum=0;
		double[] arr = new double[a];
		double[] arr2 = new double[a];
		double effort=0;
		for(int i=0; i<arr.length; i++)
		{
			arr[i] = sc.nextInt();
		}
		
		double max=arr[0];
		
		for(int i=0; i<a; i++)
		{
			if(arr[i]>max) {
				max = arr[i];
			}
		}
		
		for(int i=0; i<arr2.length; i++)
		{
			arr2[i] = (arr[i]/max)*100;
		}

		for(int i=0; i<arr2.length; i++)
		{
			sum += arr2[i];
		}
		
		effort=sum/a;
		System.out.print(effort);
	}
}

 

 

반응형