본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 1546번 : 평균

by hyunipad 2021. 3. 4.
반응형

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

 

1546번: 평균

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

www.acmicpc.net

 

문제 해설

전에 했던 최댓값 구하기를 통해 최댓값을 구한 후 문제에 제시된 식 대로 점수를 조작한 후 평균을 구하면 될 거 같다.

 

해결 방법

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

public class Main{

	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	
		int count = Integer.parseInt(br.readLine());
		int[] num = new int[count];

		StringTokenizer st = new StringTokenizer(br.readLine()," ");

		// StringTokenizer로 분리하여 배열에 저장
		for (int i = 0; i < num.length; i++) {
			num[i] = Integer.parseInt(st.nextToken());
		}
		
		int max = 0;	
		
		// 반복문을 통해 맥스값 도출
		for(int i  = 0 ; i < num.length ; i++) {
			if(max < num[i]) {
				max = num[i];
			}
		}
		
		// 반복문을 통해 sum 도출
		double sum = 0;	// 소수점 자리까지 계산하기 위해서 sum을 double로 선언해야함	
		for(int i = 0 ; i < num.length ; i++) {
			sum += (double)num[i]/(double)max*100;
		}
		
		bw.write(String.format("%f", (double)sum/(double)num.length));

		br.close();
		bw.flush();
		bw.close();
	}
}

이번 문제를 풀면서 새롭게 알아낸 개념들이 있다.

 

1. BufferdWrite.write()는 값을 출력할 때 유니코드 형식으로 출력한다.

 

처음에는 bw.write((double) sum.(double) num.length)); 이런 식으로 작성하니 숫자 값이 나오지 않고 이상한 문자가 출력되었었다. 이상해서 인터넷 서칭을 해보니 write() 메서드는 유니코드 화하여 출력된다는 사실을 알았다.

숫자를 출력시킬 때는 위와 같은 형식으로 출력해야 한다.

 

2. 숫자 간의 형 변환

 

점수 값을 조작할 때 double로 형 변환하지 않고 int형끼리 계산을 했었다. ex) num [i]/max*100

그러다 보니 소수점 자리가 출력되지 않아서 계속 0이 찍혔었다. 이거 때문에 조금 늦어졌다.

다음엔 주의하자.

 

 

백준 알고리즘을 풀며 느끼는 거지만 단순히 알고리즘 공부뿐만 아니라 기본을 연마하게 되는 거 같다.

형 변환 또는 입출력 등

국비를 통해 게시판만 만들 줄 알던 나에게 백준 알고리즘 아주 좋은 학습이 되는 거 같다.

반응형

댓글