BAEKJOON 문제 풀이 : 4344번 평균은 넘겠지
BAEKJOON2020. 3. 16. 14:40
문제 : https://www.acmicpc.net/problem/4344
4344번: 평균은 넘겠지
문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 출력 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자
www.acmicpc.net
학생들의 점수가 평균치가 넘는 비율을 계산하는 문제입니다.
인풋값을 배열 또는 리스트로 입력받으면 쉽게 접근할 수 있습니다.
문제 풀이는 아래와 같습니다.
1. Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int cntLoop = Integer.parseInt(br.readLine());
for (int i = 0; i < cntLoop; i++) {
String[] arrStr = br.readLine().split(" ", -1);
int cntStudents = Integer.parseInt(arrStr[0]);
int sumScore = 0;
for (int j = 1; j < cntStudents + 1; j++) {
sumScore += Integer.parseInt(arrStr[j]);
}
float avgScore = (float) sumScore / cntStudents;
int high = 0;
for (int j = 1; j < cntStudents + 1; j++) {
if (Integer.parseInt(arrStr[j]) > avgScore)
high++;
}
bw.write(String.format("%.3f", ((float) high / cntStudents) * 100) + "%\n");
}
bw.close();
br.close();
}
}
|
cs |
2. Python 3
1
2
3
4
5
6
7
8
9
10
11
|
import sys
if __name__ == '__main__':
for i in range(int(sys.stdin.readline())):
listCase = list(map(int, sys.stdin.readline().strip().split(' ', -1)))
avg = sum(listCase[1:]) / listCase[0]
high = 0
for j in listCase[1:]:
if j > avg:
high += 1
print('%.3f' % ((high / listCase[0]) * 100) + '%')
|
cs |
아래는 for문과 if문을 한 줄로 쓰는 코딩법을 연습하기 위해 작성해본 코드입니다.
작업 시간은 약간 줄어들었지만 list를 한 번 더 사용하는거라.. 효율은 잘 모르겠습니다.
1
2
3
4
5
6
7
|
import sys
if __name__ == '__main__':
for i in range(int(sys.stdin.readline())):
listCase = list(map(int, sys.stdin.readline().strip().split(' ', -1)))
avg = sum(listCase[1:]) / listCase[0]
print('%.3f' % ((sum(list(1 for j in listCase[1:] if j > avg)) / listCase[0]) * 100) + '%')
|
cs |
'BAEKJOON' 카테고리의 다른 글
BAEKJOON 문제 풀이 : 15596번 정수 N개의 합 (0) | 2020.03.16 |
---|---|
BAEKJOON 문제 풀이 : 8958번 OX퀴즈 (0) | 2020.03.16 |
BAEKJOON 문제 풀이 : 3052번 나머지 (0) | 2020.02.20 |
BAEKJOON 문제 풀이 : 2562번 최댓값 (0) | 2020.02.17 |
BAEKJOON 문제 풀이 : 10818번 최소, 최대 (0) | 2020.02.13 |