

import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
int number = Integer.parseInt(br.readLine());
list.add(number);
}
int average = calcAverage(list);
int mode = calcMode(list);
System.out.println(average);
System.out.println(mode);
}
static int calcAverage(List<Integer> list) {
int sum = 0;
for (int i = 0; i < list.size(); i++) {
sum += list.get(i);
}
int answer = sum / 10;
return answer;
}
static int calcMode(List<Integer> list) {
Map<Integer, Integer> map = new HashMap<>();
/** !!! 주의 !!! count가 항상 0으로 초기화되는 문제 발생
for (int i = 0; i < list.size(); i++) {
int count = 0;
map.put(list.get(i), count++);
}
for (int i = 0; i < list.size(); i++) {
int count = map.getOrDefault(list.get(i), 0);
map.put(list.get(i), count + 1);
}
int key = Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey();
return key;
}
}
for (int i = 0; i < list.size(); i++) {
int count = 0;
map.put(list.get(i), count++);
}
왜냐하면 반복문 첫번째 줄에서 0으로 항상 초기화 되기 때문이다.
Map에다가 값을 누적시킬 경우에는 getOrDefault()를 사용하면 된다.
for (int i = 0; i < list.size(); i++) {
int count = map.getOrDefault(list.get(i), 0);
map.put(list.get(i), count + 1);
}

public class Main {
private static BufferedWriter bw = new BufferedWriter
(new OutputStreamWriter(System.out));
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int arr[] = new int[1001];
int sum = 0;
for (int i = 0; i < 10; i++) {
int N = Integer.parseInt(br.readLine());
sum += N;
arr[N]++;
}
int max = 0;
int maxIdx = 0;
for (int i = 0; i < 1001; i++) {
if (max < arr[i]) {
max = arr[i];
maxIdx = i;
}
}
bw.write(sum / 10 + "\n");
bw.write(String.valueOf(maxIdx));
bw.flush();
}
}
가장 많이 입력된 값을 알아내는 가장 쉬운 방법 (중요)