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

2024. 8. 24. 23:25알고리즘 풀이

문제 링크

문제 : 평균을 넘는 학생의 비율구하기


들어가며

일단 문제가 너무 웃겼다.

처음으로 자바 BufferedReader을 사용해서 풀이를 했다.
자바는 왜이리 코드가 길고 어려운걸까

무튼
순서 : 입력 → 평균구하기 → 평균넘는 학생수 구하기 → 답구하기(평균 넘은 학생 / 전체 학생 * 100%)

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

class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int C = Integer.parseInt(bf.readLine());
		
		// 테케 반복
		for (int tc=0;tc<C;tc++) {
			// 입력된 한 줄을 받아오고
			StringTokenizer st = new StringTokenizer(bf.readLine());
			// 받은 줄에서 개행빼고 수를 읽어와서 정수로 변환해 N에 넣음.
			int N = Integer.parseInt(st.nextToken());
			int[] nums = new int[N]; // 배열생성
			int totalScore = 0;		// 전체 점수
            // 순회하면서 각 자리에 정수로 변환된 입력을 넣음
			for (int i=0;i<N;i++) {
				nums[i] = Integer.parseInt(st.nextToken());
				totalScore += nums[i]; // 전체 점수 구하는 중
			}
			// 평균 구하기
			double avg = (double) totalScore/N ; /
			
			// 평균보다 높은 사람 수
			int cnt = 0;
			for (int i=0;i<N;i++) {
				if(nums[i]>avg) {
					cnt++;
				}
			}
			// 높은 인원 / 전체 인원 *100
			System.out.printf("%.3f%%%n",(double) cnt/N *100); // 30.000% 형식으로 출력.
		
		}
	}
}


이해한 내용
C는 입력으로 들어올 때 한줄로 들어왔으니까 바로 bf.readLine을 바로 정수형으로 변경하여 입력했고,
N 입력은 한 줄에 3 30 70 80 이런식으로 들어오기 때문에
문자를 읽고 공백으로 구분해 데이터를 받기 위해
StringTokenizer을 사용해서 한 줄의 내용을 통으로 가져와 st변수에 할당했다.
다음으로 st.nextToken()을 통해 문자를 하나씩 가져와서 Integer.parseInt()를 사용해서 int형으로 바꿨다.

이런 과정으로 전부 입력받았다.

파이썬에서는 입력이 진짜 짧고 간단했는데 자바는 너무 복잡해서 코드가 길어지고 피로가 쌓이는 단점이 있었지만 자바공화국에서는 피할 수 없는 것 같다.

'알고리즘 풀이' 카테고리의 다른 글

[백준]수들의 합2  (2) 2024.09.07
[백준]17135_캐슬디펜스  (0) 2024.08.26
1216_회문2  (1) 2024.08.24
1215_회문1  (1) 2024.08.24
2005_파스칼의삼각형  (0) 2024.08.24