BOJ_S3_2108
๐ [S3_2108] ํต๊ณํ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class Main {
static ArrayList<Integer> list;
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// **** input start ****
N = Integer.parseInt(br.readLine());
list = new ArrayList<>();
// ์ ์ ์
๋ ฅ
for (int i = 0; i < N; i++) {
int input = Integer.parseInt(br.readLine());
list.add(input);
// ๋น๋ ์ถ๊ฐ
}
// **** input end ****
// ์ ๋ ฌํ๊ธฐ
Collections.sort(list);
// **** output ****
sb.append(avg()).append("\n").append(center()).append("\n").append(mostView()).append("\n").append(diff());
System.out.println(sb);
}
// ์ฐ์ ํ๊ท
static int avg() {
double sum = 0.0;
for (int i = 0; i < N; i++) {
sum += list.get(i);
}
double avg = sum / list.size();
return (int) Math.round(avg);
}
// ์ค์๊ฐ
static int center() {
return list.get(list.size() / 2);
}
// ์ต๋น๊ฐ
static int mostView() {
// N์ด ํ๊ฐ๋ฉด ๊ทธ๋ฅ ์ถ๋ ฅ
if (N == 1)
return list.get(0);
else {
// map ์ฌ์ฉ ( ๊ฐ, ๋น๋์ )
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < list.size(); i++) {
// ํฌํจ๋์ด์ ธ ์์ผ๋ฉด ๋น๋์๋ง 1 ์ฆ๊ฐ
if (map.containsKey(list.get(i))) {
map.replace(list.get(i), map.get(list.get(i)) + 1);
} else {
// ์๋ก์ด ๊ฐ์ด๋ฉด 1 ์
๋ ฅ
map.put(list.get(i), 1);
}
}
// ๋น๋์ ๋ฆฌ์คํธ
ArrayList<Integer> check = new ArrayList<>();
for (Entry<Integer, Integer> m : map.entrySet()) {
check.add(m.getValue());
}
// ์ ๋ ฌ
Collections.sort(check);
int temp = check.get(check.size()-1);
// ์ต๋น๊ฐ์ด 2๊ฐ ์ด์
if(check.get(check.size()-1) == check.get(check.size()-2)) {
check.clear();
// map ๋๋ฉด์ 2๋ฒ์งธ๋ก ์์ ๊ฐ ์ถ๋ ฅ
for (Entry<Integer, Integer> m : map.entrySet()) {
// ์ต๋น๊ฐ์ธ ๊ฒฝ์ฐ
if(m.getValue() == temp) {
// key ๊ฐ ์ ์ฅ
check.add(m.getKey());
}
}
// key ๊ฐ ์ ๋ ฌ
Collections.sort(check);
// ๋๋ฒ์งธ ๊ฐ ์ถ๋ ฅ
return check.get(1);
}
// ์ต๋น๊ฐ์ด 1๊ฐ์ธ ๊ฒฝ์ฐ
else {
int res = 0;
// map ๋๋ฉด์ 2๋ฒ์งธ๋ก ์์ ๊ฐ ์ถ๋ ฅ
for (Entry<Integer, Integer> m : map.entrySet()) {
// ์ต๋น๊ฐ์ธ ๊ฒฝ์ฐ
if(m.getValue() == temp) {
res = m.getKey();
}
}
return res;
}
}
}
// ๋ฒ์
static int diff() {
return list.get(list.size() - 1) - list.get(0);
}
}
๐ค ๋์ ์๊ฐ
๋ฌธ์ ๋ ์ฌ์ ๋๋ฐโฆ
- ์ฐ์ ํ๊ท : ๋ฆฌ์คํธ๋ก ์๋ฅผ ๋ฐ์ avg๋ฅผ ๊ณ์ฐํ ํ
Math.round()
์ฌ์ฉ - ์ค์๊ฐ : ๋ฆฌ์คํธ ์ ๋ ฌ
Collections.sort()
์ด์ฉํด ํ์๊ฐ๋ฅผ ๋ฐ๊ธฐ ๋๋ฌธ์ size()/2 ํด์ฃผ๋ฉด ๊ฐ๋จ -
์ต๋น๊ฐ
- ์ด๊ฒ์ด ๋ฌธ์ ์๋ค.. ๋ด๊ฐ ๋๋ฌด ์ด๋ ต๊ฒ ์๊ฐํ๋๋ ์ ๋ชจ๋ฅด๊ฒ ๋๋ฐ ๋์ ๊ณํ์ ์ด๋ฌํ๋ค.
- HashMap ์ ์ด์ฉํด
map< ๊ฐ, ๋น๋์ >
๋ฅผ ์ ์ฅํ๋ค. - ๋น๋์๋ง ๋ฆฌ์คํธ๋ก ๋ฐ์ ์ ๋ ฌํด์ ์ต๋น์ ๊ตฌํด์ฃผ๊ธฐ
- ๋ง์ฝ 2๊ฐ์ด๋ฉด ๋ค์ map์ ๋๋ฉด์ ์ต๋น๊ฐ์ธ ๊ฒฝ์ฐ ๋น๋์๋ฅผ ๋ฆฌ์คํธ์ ์ ์ฅํด ์ ๋ ฌํด์ 2๋ฒ์งธ๋ก ์์ ๊ฐ์ ์ถ๋ ฅํด์คฌ๋ค.
- ๋ฒ์ : ๋ฆฌ์คํธ ์ ๋ ฌํ ๊ฒ์ ์ด์ฉํด์ ๋ง์ง๋ง๊ฐ - ์ฒ์๊ฐ
์ง์ง ๋นจ๋ฆฌ ๋๋ผ ์ ์๋ ๋ฌธ์ ์๋๋ฐ.. ์ต๋น๊ฐ์์ ๋๋ฌด ์๊ฐ์ ๋ง์ด ์๋ชจํ๋คโฆ ์์ฝ์ฐ..