본문 바로가기
알고리즘 풀이

[백준] 1546번: 평균 - java 풀이

by 코디드 2023. 6. 16.

배열을 이용한 풀이

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		
		double score[] = new double[N];
		
		StringTokenizer st = new StringTokenizer(br.readLine());				
		
		double max = -1;
		
		for(int i=0; i<N; i++) {
			score[i] = Double.parseDouble(st.nextToken());
			
			if(score[i]>max) {
				max = score[i];
			}
		}
		
		double sum=0;
		for(double k : score) {
			sum += k/max*100;
		}
		
		System.out.println(sum/N);
		
	}
}

 

처음에 점수를 입력받을 때부터 double 형으로 받아야 되는데 int로 받고 세 점수를 더한 sum 값만 double 형으로 받으려고 해서 제대로 된 값이 나오지 않았다. 점수를 int 형으로 받아놔서 40/80*100 이 0.5*100 이 아닌 0 * 100으로 처리돼서 계속 오류가 떴다. 

 

sort()를 사용하지 않은 것은 메모리를 최대한 적게 사용하기 위해서이다.

 

 

 

 

배열을 이용하지 않은 풀이

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		
		StringTokenizer st = new StringTokenizer(br.readLine());				
		
		double max = -1;
		double sum=0;
		
		for(int i=0; i<N; i++) {
			double score = Double.parseDouble(st.nextToken());
			
			if(score>max) {
				max = score;
			}
			
			sum += score;
			
		}
		
		System.out.println(sum/max*100/N);
		
	}
}

 

처음에 문제를 풀때 조작된 점수를 각각 계산한 다음 평균을 구하는것 보다 원래 점수를 전부 더한 후에 점수를 조작하고 평균을 구하면 되겠다고 생각을 했었는데 그걸 막상 배열 없이 풀때 적용하면 되겠다는 생각은 하지 못했다. 

처음 점수를 입력 받을 때 합에 넣어버리는 방식으로 풀면 간단하게 풀수 있는 문제였다.