사용 언어 : JAVA
결과
- 메모리 : 25,104 kb
- 실행 시간 : 168 ms
- 코드 길이 : 2,770
풀이
package level_2;
import java.util.*;
public class java_1204 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
int num = sc.nextInt();
for (int i = 1; i <= T; i++) {
sc.nextLine();
String str = sc.nextLine();
String[] str_arr = str.split(" ");
// 0부터 100까지 점수 (빈도 표시 배열)
int counts[] = new int[101];
// 학생의 점수 배열에서 반복문을 실행하여 빈도를 추가한다. 이때 counts의 index값이 점수가 된다.
for (int j = 0; j < str_arr.length; j++) {
int n = Integer.parseInt(str_arr[j]);
counts[n] += 1;
}
// 가장 높은 빈도를 나타내기 위한 반복문
int max = 0;
int maxIndex = 0;
for (int j = 0; j < counts.length - 1; j++) {
if (counts[j] >= max && j > maxIndex) {
max = counts[j];
maxIndex = j;
}
}
System.out.println("#"+i+" "+maxIndex);
}
}
}
주석
- 역시 lv 1이랑은 다르다. 조금 더 생각해야 하는 문제가 나왔다.
- 로직을 조금 복잡하게 짰다고 볼 수도 있을텐데, 이 문제가 아닌 다른 문제에서 응용을 쉽게 하기 위함이다.
- 학생의 점수 값을 String[] str_arr로 받아와 배열화하여 int로 전환한 부분 -> int counts[] 부분처럼 int student[] = new int[1000]; 이렇게 할 수도 있으나 만약 1000개의 값이 안 나온다면? 사용자의 실수로 한 개가 누락된다면? 이런 경우도 고려해야하기 때문에 문자열로 받아와 배열화했다.
- 최빈도에 해당하는 점수를 구하는 문제이지만, 최빈도가 궁금해질 수도 있기 때문에 max도 설정했다.
- if (counts[j] >= max && j > maxIndex) { : 이 부분에서 꼭 counts[j] >= max 로 설정해주어야 한다. 만약 최빈도가 같은 점수가 여러 개 있을 경우, counts[j] > max로 해버리면 조건에 부합하지 않는 결과가 나온다.
'CodingTest > SW Expert Academy' 카테고리의 다른 글
[SW Expert Academy] 1288. 새로운 불면증 치료법 (1) | 2024.01.24 |
---|---|
[SW Expert Academy] 2072. 홀수만 더하기 (0) | 2024.01.19 |
[SW Expert Academy] 2071. 평균값 구하기 (1) | 2024.01.19 |
[SW Expert Academy] 2070. 큰 놈, 작은 놈, 같은 놈 (0) | 2024.01.17 |
[SW Expert Academy] 2068. 최대수 구하기 (0) | 2024.01.17 |