mark340
착하게살자
mark340
전체 방문자
오늘
어제
  • 분류 전체보기 (98)
    • 백준 (11)
    • 알고리즘 (1)
    • Javascript (17)
    • CS (18)
    • 기타 (9)
    • AI (1)
    • Angular (2)
    • Linux (14)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JavaScript
  • parsing
  • Closure
  • MySQL
  • oauth

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
mark340

착하게살자

[백준 2108] 통계학 / 배열 요소의 최빈값 구하기 / Object.entries()
백준

[백준 2108] 통계학 / 배열 요소의 최빈값 구하기 / Object.entries()

2023. 1. 14. 19:43

https://www.acmicpc.net/problem/2108

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

 

 

셋째 줄 최빈값 구하는것 때문에 애를 많이 먹었습니다.

 

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
    '백준' 카테고리의 다른 글
    • [백준 11047] 동전0 / Node.js / 그리디 알고리즘 기초
    • [백준 1931] 회의실 배정 / Node.js
    • [백준 18870] 좌표 압축 / Map
    • [백준 1181번] 단어정렬 / Set(배열중복제거) / localeCompare() (단어정렬)
    mark340
    mark340
    착하게삽시다

    티스토리툴바