문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
#변수설명
student_num: 테스트 케이스마다 첫수로 주어지는 학생의 숫자를 담아주는 변수.
count: 평균을 넘어가는 학생들의 수를 체크하여주는 변수.
len: ArrayList에 있는 값을 len++를 이용하여 순서대로 꺼내주는 변수.
avg: 평균 점수
sum: 모든 학생들의 점수의 총합
1. 바깥쪽 for문은 테스트 케이스의 개수 C만큼 반복해야하기 때문에 i는 c까지 반복하여준다
2. StringTokenizer의 hasMoreTokens()를 이용하여 담겨있는 토큰들을 전부 꺼내준다
(다음에 나올 토큰이있으면 true, 없으면 false를 반환해주는 메서드이다)
3. ArrayList num에 테스트 케이스 한줄의 정보 즉 학생의 숫자 + 점수들 을 담아준다.
student_num에 첫번째 값을 담아주는 이유는 점수의 총합을 구할때에 num에 들어있는 모든 값을 합하여
학생의 총점을 구하는데 평균을 계산할때에 학생의 숫자만큼만 빼주면 되기 때문이다.
(학생숫자 + 점수들 = (학생숫자+총합) => (학생숫자+총합) - 학생숫자 = 총합만 남는다)
4. avg에 점수의 평균을 담아주고 for문을 통하여 평균점수보다 점수가 높고 학생의 숫자와 점수가 같지않을때에
count++를 해주어 평균점수보다 높은 학생의 수를 구하여 준다
5. StringBuilder의 append() 메소드와 String.format을 이용하여 소수점 3자리 까지만 나올수 있게 해주고
.append(\n)로 개행까지 해주면 끝이다.
(평균점수보다 높은 학생의 수/총 학생의 수 * 100 = 평균보다 높은 학생의 비율)
num을 반복문이 돌때마다 clear()를 해주는 이유는
초기화 시켜주지 않으면 값이 계속 이어져서 담기 때문인데 이부분은 자세히 설명하지 않아도 다들 알고있을것이다.
초보 개발자인 글쓴이가 직접 풀었기에 코드의 효율성이 좋지 못할것이다
혹시 이 글을 보게된다면 이 사람은 이런 방식을 이용했구나 정도로
참고만하고 더 좋은 코드들을 보기바란다...!
'기능,개념 & 알고리즘 > 알고리즘' 카테고리의 다른 글
백준 1316 자바 (0) | 2021.09.02 |
---|---|
백준 2675 자바 (0) | 2021.09.01 |
백준 4673 자바 (0) | 2021.08.31 |
백준 10952자바 (0) | 2021.08.24 |
백준 2439 (0) | 2021.07.25 |