티스토리 뷰
keyword : 2차원 배열
difficulty : 중
completion : ✅
notice :
평균은 넘겠지
📝 문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
예제 입력 1
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
예제 출력 1
40.000%
57.143%
33.333%
66.667%
55.556%
🔍 정답
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int C = Integer.parseInt(br.readLine());
int[][] array = new int[C][];
for (int i = 0; i < C; i++) {
int sum = 0;
float avg = 0;
int cnt = 0;
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
array[i] = new int[N+1];
array[i][0] = N;
for (int j = 1; j <= N; j++) {
array[i][j] = Integer.parseInt(st.nextToken());
sum += array[i][j];
}
avg = (float) sum / N;
for (int j = 1; j <= N; j++) {
if (array[i][j] > avg) {
cnt++;
}
}
float result = (float) cnt / N * 100;
String results = String.format("%.3f", result);
System.out.println(results + "%");
}
}
}
- 입력값을 2차원 배열로 나타내기 위해 시간을 엄청 잡아먹었다 ㅠㅠ 구현 로직 자체는 어렵지 않았지만 2차원 배열이 익숙하지 않아서 콘솔창에 찍어보며 구현하느라 시간이 오래 걸렸고, 각 row마다 0번 인덱스에 계산에 포함하지 말아야 할 요소가 들어있어서 생각을 많이 하면서 풀어야 했다
- 전체적인 풀이는, 2차원 배열에 각각의 입력값들을 담고 그 배열들을 돌면서 평균을 넘는 학생수의 비율을 출력하는 것이다.
- C = 2 (총 row수)
- [1번row][학생수, 점수, 점수, 점수]
- [2번row][학생수, 점수, 점수, 점수, 점수, 점수]
- 대략 이런식으로 배열을 만들어 나갈 것이다.
- row C줄마다 N + 1개의 배열을 생성
- array[i] = new int[N+1]; 를 한 이유
- 0번 인덱스는 다음 인덱스들의 개수를 의미하므로 N+1개가 된다
- 예시) 4 10 20 30 40 -> 4명의 학생이 각각 10, 20, 30, 40점이라는 뜻이므로 배열의 크기는 학생수가 몇 명인지 표기한 인덱스까지 포함하여 4+1개임
- 각 row의 0번 인덱스는 N이므로, array[\i][0] = N; 라고 지정해주고 나머지는 2차원 배열을 돌면서 값을 채워주며, 평균을 구하기 위해 sum에 점수를 더해준다!
- sum / N을 해서 평균을 구하고 각 인덱스가 평균보다 높으면 cnt를 하나씩 세어준다.
- cnt / N * 100 을 하면 평균을 넘는 학생수의 비율이 나오고
- 소수점 세자리까지 표현하기 위해 String.format을 사용하였다
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 단어정렬(백준1181번) (0) | 2022.10.26 |
---|---|
[알고리즘] 크로아티아 알파벳(백준2941번) (1) | 2022.10.23 |
[알고리즘] 소수찾기(백준1978번) (0) | 2022.10.19 |
[알고리즘] 평균(백준1546번) (0) | 2022.10.18 |
[알고리즘] 분해합(백준2231번) (0) | 2022.10.15 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 이분탐색
- Comparator
- dfs
- CS
- java
- 자바스크립트
- 자바bfs
- 프로그래머스
- 리액트
- 자바dp
- Spring
- DP
- 정렬
- 자바
- BFS
- 해시맵
- 백준
- 스프링
- Nest
- Algorithm
- JPA
- 타입스크립트
- SQLD
- 형변환
- JavaScript
- 알고리즘
- SQL
- 스프링부트
- Queue
- 자바트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함