컴퓨터를 공부하고자 마음먹은지 N일차

[216일차]boj 2108 nodejs 본문

🧠PS

[216일차]boj 2108 nodejs

졸린새 2021. 4. 17. 00:08
728x90

BOJ 2108 통계학

문제링크

CODE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
const readline = require("readline");
 
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});
const input = [];
 
function getAverage(N, nums) {
    let sum = nums[0];
    for (let i = 1; i < N; i++) {
        sum += nums[i];
    }
    return Math.round(sum / N);
}
 
function getMid(N, nums) {
    let centIdx = ~~(N / 2);
    return nums[centIdx];
}
 
function getMode(N, nums) {
    const modeObj = {};
    let modeList = [];
    let maxCount = 0;
 
    nums.forEach((num) => {
        if (!modeObj[num]) {
            modeObj[num] = 1;
        } else {
            modeObj[num]++;
        }
    });
 
    Object.keys(modeObj).forEach((key) => {
        const count = modeObj[key];
 
        if (maxCount <= count) {
            maxCount = count;
        }
    });
 
    Object.keys(modeObj).forEach((key) => {
        const count = modeObj[key];
 
        if (maxCount === count) modeList.push(+key);
    });
 
    modeList.sort((a, b) => a - b);
 
    if (modeList.length === 1) {
        return modeList[0];
    } else {
        return modeList[1];
    }
}
 
function getRange(N, nums) {
    const max = nums[N - 1];
    const min = nums[0];
 
    return max - min;
}
 
rl.on("line"function (line) {
    input.push(line);
}).on("close"function () {
    const N = +input.shift();
    const nums = input.map((_) => +_).sort((a, b) => a - b);
 
    const average = getAverage(N, nums);
    const cent = getMid(N, nums);
    const mode = getMode(N, nums);
    const range = getRange(N, nums);
 
    console.log(average);
    console.log(cent);
    console.log(mode);
    console.log(range);
 
    process.exit();
});
cs

description

런타임 에러때문에 es6문법을 es5로도 바꿔보고,
for in이나 of문을 for문이나 함수형 순환문으로도 바꿔봤는데,
결국 잘못은 내코드였다 ㅎㅎ;(타입스크립트로도 문제풀게 해달라 ㅠ)
이 문제의 포인트는 mode를 구하는거다 최빈값.
첫번째는 먼저 가장 큰 반복횟수 를 찾는 과정이다.
이 과정에서 for문을 두번썼다. 다행히 중첩이되지않아서 시간초과는 안남
가장 큰 반복횟수와 같은 수를 modeList에다 집어넣어줬다.
그리고 그것의 1번째인덱스를 리턴하면 되는것.

'🧠PS' 카테고리의 다른 글

[221일차]boj 2231 nodejs  (0) 2021.04.22
[220일차]boj 2164 nodejs(연결리스트 응용문제)  (0) 2021.04.21
[211일차]boj1966 nodejs  (0) 2021.04.12
[206일차]boj1929 nodejs  (0) 2021.04.07
[205일차]boj1920 node.js  (0) 2021.04.06
Comments