๋”ฐํŒŒ๐Ÿ•
Hwaiian Pizza IT Pub
๋”ฐํŒŒ๐Ÿ•
  • ALL (62)
    • Front-End (13)
      • HTML & CSS (2)
      • JavaScript (7)
      • React (2)
      • TypeScript (0)
      • Jquery (0)
      • Git (1)
      • Editor (0)
    • Algorithms (44)
      • Baekjoon (28)
      • Programmers (13)
      • Algorithms (3)
    • Computer Science (0)
      • Math (0)
    • Conference (1)
    • Life (3)
      • Book (0)
hELLO ยท Designed By ์ •์ƒ์šฐ.
๋”ฐํŒŒ๐Ÿ•

Hwaiian Pizza IT Pub

[JS] ๋ฐฑ์ค€ 2108๋ฒˆ : ํ†ต๊ณ„ํ•™
Algorithms/Baekjoon

[JS] ๋ฐฑ์ค€ 2108๋ฒˆ : ํ†ต๊ณ„ํ•™

2022. 5. 13. 22:11
๋ฐ˜์‘ํ˜•

 

Question

๋ฐฑ์ค€ 2108๋ฒˆ : ํ†ต๊ณ„ํ•™

์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํ†ต๊ณ„ํ•™์—์„œ ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ ์ผ์ด๋‹ค. ํ†ต๊ณ„ํ•™์—์„œ N๊ฐœ์˜ ์ˆ˜๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ๊ธฐ๋ณธ ํ†ต๊ณ„ ๊ฐ’์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค. ๋‹จ, N์€ ํ™€์ˆ˜๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ž.

  1. ์‚ฐ์ˆ ํ‰๊ท  : N๊ฐœ์˜ ์ˆ˜๋“ค์˜ ํ•ฉ์„ N์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’
  2. ์ค‘์•™๊ฐ’ : N๊ฐœ์˜ ์ˆ˜๋“ค์„ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ๋‚˜์—ดํ–ˆ์„ ๊ฒฝ์šฐ ๊ทธ ์ค‘์•™์— ์œ„์น˜ํ•˜๋Š” ๊ฐ’
  3. ์ตœ๋นˆ๊ฐ’ : N๊ฐœ์˜ ์ˆ˜๋“ค ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฐ’
  4. ๋ฒ”์œ„ : N๊ฐœ์˜ ์ˆ˜๋“ค ์ค‘ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์˜ ์ฐจ์ด

N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋„ค ๊ฐ€์ง€ ๊ธฐ๋ณธ ํ†ต๊ณ„๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

 

2108๋ฒˆ: ํ†ต๊ณ„ํ•™

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ, N์€ ํ™€์ˆ˜์ด๋‹ค. ๊ทธ ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์ •์ˆ˜๋“ค์ด ์ฃผ์–ด์ง„๋‹ค. ์ž…๋ ฅ๋˜๋Š” ์ •์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์€ 4,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

www.acmicpc.net

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ, N์€ ํ™€์ˆ˜์ด๋‹ค. ๊ทธ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์ •์ˆ˜๋“ค์ด ์ฃผ์–ด์ง„๋‹ค. ์ž…๋ ฅ๋˜๋Š” ์ •์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์€ 4,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์‚ฐ์ˆ ํ‰๊ท ์„ ์ถœ๋ ฅํ•œ๋‹ค. ์†Œ์ˆ˜์  ์ดํ•˜ ์ฒซ์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” ์ค‘์•™๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

์…‹์งธ ์ค„์—๋Š” ์ตœ๋นˆ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๋•Œ์—๋Š” ์ตœ๋นˆ๊ฐ’ ์ค‘ ๋‘ ๋ฒˆ์งธ๋กœ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋„ท์งธ ์ค„์—๋Š” ๋ฒ”์œ„๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…๋ ฅ์˜ˆ์‹œ

5
1
3
8
-2
2

 

์ถœ๋ ฅ์˜ˆ์‹œ

2
2
1
10

 


 

 

My code

 

 

์ฒ˜์Œ์— -0์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฑฐ ๋•Œ๋ฌธ์— ํ‹€๋ ธ๋‹ค.

let input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n');

let arr = input.map(Number);
let length = arr[0];
arr.shift();

// ์‚ฐ์ˆ ํ‰๊ท  -๋ฐ˜์˜ฌ๋ฆผ
let a = arr.reduce((a, b) => a + b);
let avg = Math.round(a / length);

// ์ค‘์•™๊ฐ’ -๋ฒ„๋ฆผ
arr.sort((a, b) => a - b);
let answer = (length % 2 === 0 ? arr[length / 2] + arr[(length / 2) - 1] : arr[Math.floor(length / 2)])

// ์ตœ๋นˆ๊ฐ’ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•˜๋Š” ๊ฐ’, ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์„๋•Œ ๋‘๋ฒˆ์งธ๋กœ ์ž‘์€๊ฐ’ ์ถœ๋ ฅ
function getMostValue() {
    const map = new Map();
    for (let i in arr) {
        if (!map.has(arr[i])) {
            map.set(arr[i], 1) // key, value ์ €์žฅ
        } else {
            map.set(arr[i], map.get(arr[i]) + 1) // value + 1   ์ค‘๋ณต๋˜๋ฉด ๋นˆ๋„์ˆ˜ ์ถ”๊ฐ€, get์€ value๋ถˆ๋Ÿฌ์˜ด ์•„ํ•˜
        }
    }
    let maxValue = 0;
    let arr2 = [];
    map.forEach((ele, key) => {
        if (maxValue < ele) {
            maxValue = ele;
            arr2 = []; // ๋ฐฐ์—ด ๋ฆฌ์…‹
            arr2.push(key); // ๋ฐ˜๋„์ˆ˜๊ฐ€ ํฐ ๊ฒƒ๋งŒ ๋ฐฐ์—ด์— ์ถ”๊ฐ€
        } else if (maxValue === map.get(key)) {
            arr2.push(key); // ๋นˆ๋„์ˆ˜๊ฐ€ ๋˜‘๊ฐ™๋‹ค๋ฉด ์ „๋ถ€ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๊ธฐ
        }
    })
    return arr2.length !== 1 ? arr2[1] : arr2[0];
}


// ๋ฒ”์œ„ ์ตœ๋Œ€๊ฐ’ - ์ตœ์†Œ๊ฐ’
let max = Math.max(...arr);
let min = Math.min(...arr);
let range = max - min;


console.log(avg);
console.log(answer);
console.log(getMostValue());
console.log(range);

 

ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค

 

 

 

WHY?

์˜ˆ์‹œ์— ๋ณด๋ฉด -0.333333... ์„ ๋ฐ˜์˜ฌ๋ฆผํ•ด์„œ 0์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ๊ฒŒ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ถœ๋ ฅํ•ด๋ณด๋ฉด -0์ด ๋‚˜์˜จ๋‹ค!

-0์ด๋‚˜ 0์€ ๊ฐ™์€ ๊ฒŒ ์•„๋‹๊นŒ? 0์œผ๋กœ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์—ญ์‹œ ๋‚˜ ๊ฐ™์€ ์‚ฌ๋žŒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

 

According to the IEEE 754 standard, negative zero and positive zero should compare as equal with the usual (numerical) comparison operators
์†Œ์ˆ˜์  ์—ฐ์‚ฐ ํ‘œ์ค€์ธ IEEE754์— ์˜ํ•˜๋ฉด 0์„ -0๊ณผ +0์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
 

๊ธ€ ์ฝ๊ธฐ - ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”

๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

www.acmicpc.net

 

๋”ฐ๋ผ์„œ -0์œผ๋กœ ์ถœ๋ ฅํ•ด๋„ ์‚ฌ์‹ค์€ ๋งž๋Š” ๊ฐ’์ด๋‚˜ 0์œผ๋กœ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋„๋ก ์˜ˆ์ œ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

map์„ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ด์„œ ์—ฌ๊ธฐ์„œ ํ‹€๋ฆฐ ์ค„ ์•Œ์•˜๋Š”๋ฐ ์•„๋‹ˆ์—ˆ๋‹ค.

 

 

-0์ด 0์œผ๋กœ ์ถœ๋ ฅ๋  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด ์ œ์ถœํ–ˆ๋‹ค.

let input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n');

let arr = input.map(Number);
let length = arr.shift();

// ์‚ฐ์ˆ ํ‰๊ท 
let a = arr.reduce((a, b) => a + b, 0);
let avg = Math.round(a / length);

// ์ค‘์•™๊ฐ’
arr.sort((a, b) => a - b);
let answer = (length % 2 === 0 ? arr[length / 2] + arr[(length / 2) - 1] : arr[Math.floor(length / 2)])

// ์ตœ๋นˆ๊ฐ’ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•˜๋Š” ๊ฐ’, ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์„๋•Œ ๋‘๋ฒˆ์งธ๋กœ ์ž‘์€๊ฐ’ ์ถœ๋ ฅ
function getMostValue() {
    const map = new Map();
    for (let i in arr) {
        if (!map.has(arr[i])) {
            map.set(arr[i], 1) // key, value ์ €์žฅ
        } else {
            map.set(arr[i], map.get(arr[i]) + 1) // value + 1   ์ค‘๋ณต๋˜๋ฉด ๋นˆ๋„์ˆ˜ ์ถ”๊ฐ€, get์€ value๋ถˆ๋Ÿฌ์˜ด ์•„ํ•˜
        }
    }
    let maxValue = 0;
    let arr2 = [];
    map.forEach((ele, key) => {
        if (maxValue < ele) {
            maxValue = ele;
            arr2 = []; // ๋ฐฐ์—ด ๋ฆฌ์…‹
            arr2.push(key); // ๋ฐ˜๋„์ˆ˜๊ฐ€ ํฐ ๊ฒƒ๋งŒ ๋ฐฐ์—ด์— ์ถ”๊ฐ€
        } else if (maxValue === map.get(key)) {
            arr2.push(key); // ๋นˆ๋„์ˆ˜๊ฐ€ ๋˜‘๊ฐ™๋‹ค๋ฉด ์ „๋ถ€ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๊ธฐ
        }
    })
    return arr2.length !== 1 ? arr2[1] : arr2[0]; // ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ด ์•„๋‹ˆ๋ผ๋ฉด ๋‘๋ฒˆ์งธ๋กœ ์ž‘์€ ์ตœ๋นˆ๊ฐ’ ์ถœ๋ ฅ
}


// ๋ฒ”์œ„
let max = Math.max(...arr);
let min = Math.min(...arr);
let range = max - min;


console.log(avg === -0? 0 : avg);
console.log(answer);
console.log(getMostValue());
console.log(range);

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

 

 

HOW? (ํ’€์ด๋ฐฉ๋ฒ•)

 

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ๊ณ  ํ†ต๊ณ„ํ•™ ๊ณ„์‚ฐ์‹์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์ ์–ด๋‚ด๋ฉด ๋๋‹ค.

 

 

1. ์‚ฐ์ˆ ํ‰๊ท  : reduce๋ฅผ ์ด์šฉํ•ด ์ž…๋ ฅ๋œ ์ˆ˜๋“ค์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ณ  shift๋กœ ๋นผ๋‚ด ์˜จ ์ˆ˜์˜ ๊ฐœ์ˆ˜๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค.

 

2. ์ค‘์•™๊ฐ’ : ์ž…๋ ฅ๋œ ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ง์ˆ˜์ผ ๊ฒฝ์šฐ ์ค‘์•™๊ฐ’์€ ๊ฐ€์šด๋ฐ์— ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ์ˆซ์ž ํ‰๊ท ์ด์—ˆ๋‹ค.

์ง์ˆ˜ ์—ฌ๋ถ€์˜ ์กฐ๊ฑด๋ฌธ์„ ๊ฑธ๊ณ  ๊ฐ๊ฐ ์ค‘์•™๊ฐ’์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ–ˆ๋‹ค.

 

3. ์ตœ๋นˆ๊ฐ’ : map์„ ์ด์šฉํ•ด์„œ ๋นˆ๋„์ˆ˜๊ฐ€ ์ตœ๋Œ€์ธ ๊ฒƒ์„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ์ €์žฅํ•ด return ํ–ˆ๋‹ค.

๊ตฌ์ฒด์ ์ธ ์„ค๋ช…์€ ์œ„์— ์ฝ”๋“œ์— ์ ์–ด๋†จ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ์„ค๋ช…์„ ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

 

4. ๋ฒ”์œ„ : ๋ฐฐ์—ด์— ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์€ Math.max ์™€ Math.min์œผ๋กœ ๊ตฌํ•ด ๊ณ„์‚ฐํ–ˆ๋‹ค.

 

 

 

 

์ตœ๋นˆ๊ฐ’์€ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ํ•ด๊ฒฐํ–ˆ๋‹ค. ๋‹ค์Œ์—๋Š” ์•ˆ ๋ณด๊ณ  ํ’€ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผ์ง€ ๋‹ค์งํ•ด๋ณธ๋‹คโœŠ

์ตœ๋นˆ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋‚˜ ์ •๋ง ์–ด๋ ค์› ๋‹ค. map์„ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ด์„œ ๋” ๊ทธ๋žฌ๋‹ค.

๋”ฐ๋ด‰ ๊ตฌ๊ธ€๋ง์•„ ๊ณ ๋ง™๋‹ค.

 

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Algorithms > Baekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JS] ๋ฐฑ์ค€ 10870๋ฒˆ : ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 5  (0) 2022.05.16
[JS] ๋ฐฑ์ค€ 10872๋ฒˆ : ์žฌ๊ท€  (0) 2022.05.15
[JS] ๋ฐฑ์ค€ 2750๋ฒˆ : ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ  (0) 2022.05.09
[JS] ๋ฐฑ์ค€ 2292๋ฒˆ : ๋ฒŒ์ง‘  (0) 2022.05.06
[JS] ๋ฐฑ์ค€ 1712๋ฒˆ : ์†์ต๋ถ„๊ธฐ์   (0) 2022.05.05
    'Algorithms/Baekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JS] ๋ฐฑ์ค€ 10870๋ฒˆ : ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 5
    • [JS] ๋ฐฑ์ค€ 10872๋ฒˆ : ์žฌ๊ท€
    • [JS] ๋ฐฑ์ค€ 2750๋ฒˆ : ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ
    • [JS] ๋ฐฑ์ค€ 2292๋ฒˆ : ๋ฒŒ์ง‘
    ๋”ฐํŒŒ๐Ÿ•
    ๋”ฐํŒŒ๐Ÿ•
    ์ €์ชฝ ์†๋‹˜์ด ๋ณด๋‚ด์‹  ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?๐Ÿน

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”