프로그래밍/JAVA

[JAVA] 백준 4344 평균은 넘겠지

pxatd 2021. 4. 15. 06:45
728x90

문제

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

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

학습

문제를 차례대로 읽으면서 코드를 작성하면 풀 수 있는 쉬운 문제였다. 주석에도 달아놓았지만 문제를 푸는 순서는

1. 테스트 케이스 입력 (while)

2. 점수 개수 입력 (for 반복문)

3. 배열을 더해주며 합과 평균 구하기

4. if 조건문을 통해 평균이 넘는 사람이 있으면 cnt++;

5. 마지막으로 비율 공식을 통해 답을 출력해주면 된다!

 

( 여담이지만, JAVA는 코딩하면서 배열의 크기를 입력받아 할당할 수 있다는 점이 참 편했다. C컴파일러 중 DEV C++은 어떤지 잘 모르겠지만 VisualStudio 2019 버전은 사용자에게 입력받아 배열의 크기를 할당하려고 하면 "정의되지않은 크기"라며 오류코드를 반환하기때문에 동적할당이나, 반복문을 쓰는 등 우회해서 작성해야했기 때문이다. 이것도 객체지향과 절차지향의 차이가 있는 것일까? ㅎㅎ..

아직까지는 C가 손에 조금 더 익숙하지만 올해 JAVA의 메소드나 객체, Class에대한 개념을 잘 익혀서 JAVA로 코딩테스트를 준비해 보아야겠다. C는 여러 대기업들 코딩테스트 조건에서 빠져있더라.. 장단점이 있어서 그런거겠지 )

코드

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		double avg = 0;
		while(num!=0) {
		int cnt = 0;
		double sum = 0;
		int C = sc.nextInt();
		int[] arr=new int[C];
		for (int i=0; i<C; i++) {
			arr[i]=sc.nextInt();
			//각 케이스의 평균
			sum += arr[i];
			}
		avg = sum/C;
		num--;
		//평균 넘는 사람들
		for (int j=0; j<C; j++) {
			if(arr[j]>avg) {
				cnt++;
			}
		}//비율 공식 (넘는사람/전체학생)*100
		double n = (double) C;
		System.out.printf("%.3f%%\n",(cnt/n)*100.0);
		}
		sc.close();
	}
}

출처

www.acmicpc.net/problem/4344

4344번: 평균은 넘겠지

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

www.acmicpc.net

 

728x90