Algorithm/Baekjoon

[Baekjoon] 백준 4344 평균은 넘겠지 - java

담크 2021. 7. 20. 23:55

오늘은 1차원 배열의 마지막 문제인 평균은 넘겠지 문제를 가져와봤습니다.

이번 문제도 역시 수학으로 먼저 풀려고 하니까 딱 나눠지면서 이해하기 쉽더라고요... ㅎㅎ 뭔가 배열 문제만 보면 숨 턱턱 막히고 어떻게 풀어야 하나 항상 긴장 + 걱정부터 했었는데 매일 1문제라도 문제를 풀다 보니까 조금 (아주 조금..) 괜찮아진 것 같은 느낌입니다!! ㅎㅎ 

바로 문제풀러 가보겠습니다.

문제는

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

 

4344번: 평균은 넘겠지

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

www.acmicpc.net

 

여기서 확인하시면 됩니다.


문제풀이

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int c = sc.nextInt();   // 케이스수
		int[] arr;
		
		for (int i = 0; i < c; i++) {
			int n = sc.nextInt();	// 학생수
			arr = new int[n];
			
			int sum = 0;
			
			for(int j = 0; j < n; j++) {
				int point = sc.nextInt();
				arr[j] = point;
				sum += point;
			}
			
			double avg = (double)sum / n;
			double cnt = 0;
			
			for (int j = 0; j < n; j++) {
				if(arr[j] > avg) {
					cnt++;
				}
			}
			System.out.printf("%.3f%%\n", cnt / n * 100);
		}

	}
}

 

이번 문제는

1. 성적의 평균을 구하고

2. 구한 평균값을 배열의 모든 값과 비교해서

3. 평균값보다 큰 수를 카운트해서

4. 카운트한 값과 사람 수를 가지고 계산을 하는 겁니다.

5. %%를 사용해서 출력할 때 %가 나오게 해 줍니다.

 

이렇게 쓰고 보니까 뭔가 많은데 막상 풀어보면 사실 그렇게 복잡하지는 않다고 생각합니다.

전부터 계속 연습했던 터라 이제 Scanner를 사용해서 어디에 어떤 입력값을 받는지 넣는 것은 이제 익숙해진 거 같아요

또 이번 문제는 소수점 셋째 자리까지 출력하라고 명확하게 나와있기 때문에 printf를 사용했습니다.

첨에 이클립스에서는 맞게 나오는데 (테스트 케이스를 1개만 입력해서 ㅜㅜ) 제출하니까 계속 틀리다고 나오더라고요.... 그래서 왜 그런가 봤더니 %%뒤에 \n을 써주지 않아서 케이스가 여러 개일 경우 예제 출력과 다르기 때문에 틀리다고 나온 거였습니다. 혹시 실패라고 나온다면...? 한번 꼭 확인해보세요~ ㅎㅎ