https://www.acmicpc.net/problem/2108
셋째 줄 최빈값 구하는것 때문에 애를 많이 먹었습니다.
let input = z.toString().trim().split('\n').map(Number)
let N = input[0] // 개수
const arr = input.slice(1); // 정수 배열
let a = Math.round(arr.reduce((acc,cur) => acc+cur) / N ) // 1. 산술평균
let b = arr.sort((a,b) => a-b)[parseInt(arr.length/2)] // 2. 중앙값
let d = Math.max(...arr)-Math.min(...arr) // 4. 범위(최댓값 최솟값 차이)
//3. 최빈값 구하기
let map = new Map(); // 중복된 값의 개수를 적장하기 위한 객체 선언
arr.forEach((item) => {
map[item] = (map[item] || 0) + 1; // arr배열의 원소들을 순회하며 key,value 생성
// key=원소 value=1씩 추가
// 초기엔 객체에 값이 없기 때문에 0으로 세팅
})
// Map(0) {
// '1': 1,
// '2': 1,
// '3': 1,
// '8': 1,
// '-2': 1,
//.....}
let frequent = Object.entries(map).sort((a,b) => b[1]-a[1] || a[0]-b[0])
// Object.entries() 를 사용하여 객체를 배열로 생성
// 최빈값을 구하기 위해 정렬 => 최빈값이 같은 경우를 위해 요소를 오름차순으로 추가 정렬
// [
// [ '-2', 1 ],
// [ '1', 1 ],
// [ '2', 1 ],
// [ '3', 1 ],
// [ '8', 1 ]
// ]
let c = 0;
if(frequent.length>=2){ // 정수 입력값이 여러개일 경우
if(frequent[0][1] == frequent[1][1]){ // 최빈값이 여러개일 경우
c = frequent[1][0] // 최빈값중 두번째로 작은 값 !!
} else {
c = frequent[0][0]
}
} else {
c = frequent[0][0]
}
console.log(`${a}
${b}
${c}
${d}`)
Object.entries() 함수
Object.entries() 함수는 객체에서 [Key, Value] 형식의 값을 배열로 반환합니다.
let strObj = {
A : 'A string',
B : 'B string',
C : 'C string'
};
let strArr = Object.entries(strObj);
console.log(strArr);
// [['A', 'A string'], ['B', 'B string'], ['C', 'C string']]
Object.keys() 함수
Object.keys() 함수는 객체에서 key를 문자열 배열로 반환합니다.
Object.values() 함수
Object.values() 함수는 객체에서 값을 문자열 배열로 반환합니다.
배열에 있는 값들의 중복 횟수 확인
1. forEach() 이용
const arr = ['a', 'b', 'a', 'b', 'c'];
const result = {};
arr.forEach((x) => {
result[x] = (result[x] || 0)+1;
});
document.write(JSON.stringify(result));
// {"a":2,"b":2,"c":1}
2. reduce() 이용
const arr = ['a', 'b', 'a', 'b', 'c'];
const result = arr.reduce((accu, curr) => {
accu[curr] = (accu[curr] || 0)+1;
return accu;
}, {});
document.write(JSON.stringify(result));
// {"a":2,"b":2,"c":1}
'백준' 카테고리의 다른 글
[백준 11047] 동전0 / Node.js / 그리디 알고리즘 기초 (0) | 2023.01.23 |
---|---|
[백준 1931] 회의실 배정 / Node.js (0) | 2023.01.23 |
[백준 18870] 좌표 압축 / Map (0) | 2023.01.14 |
[백준 1181번] 단어정렬 / Set(배열중복제거) / localeCompare() (단어정렬) (0) | 2023.01.14 |
[백준 2587] 대표값2 (Node.js) (0) | 2023.01.10 |