[Baekjoon] 2108 - πŸ“Šν†΅κ³„ν•™

ChobbyΒ·2023λ…„ 11μ›” 23일
1

Baekjoon

λͺ©λ‘ 보기
95/108

πŸ˜€λ¬Έμ œ

수λ₯Ό μ²˜λ¦¬ν•˜λŠ” 것은 ν†΅κ³„ν•™μ—μ„œ μƒλ‹Ήνžˆ μ€‘μš”ν•œ 일이닀. ν†΅κ³„ν•™μ—μ„œ N개의 수λ₯Ό λŒ€ν‘œν•˜λŠ” κΈ°λ³Έ ν†΅κ³„κ°’μ—λŠ” λ‹€μŒκ³Ό 같은 것듀이 μžˆλ‹€. 단, N은 ν™€μˆ˜λΌκ³  κ°€μ •ν•˜μž.

μ‚°μˆ ν‰κ·  : N개의 μˆ˜λ“€μ˜ 합을 N으둜 λ‚˜λˆˆ κ°’
쀑앙값 : N개의 μˆ˜λ“€μ„ μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ λ‚˜μ—΄ν–ˆμ„ 경우 κ·Έ 쀑앙에 μœ„μΉ˜ν•˜λŠ” κ°’
μ΅œλΉˆκ°’ : N개의 μˆ˜λ“€ 쀑 κ°€μž₯ 많이 λ‚˜νƒ€λ‚˜λŠ” κ°’
λ²”μœ„ : N개의 μˆ˜λ“€ 쀑 μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ˜ 차이
N개의 μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, λ„€ 가지 κΈ°λ³Έ 톡계값을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.


πŸ˜μž…λ ₯

첫째 쀄에 수의 개수 N(1 ≀ N ≀ 500,000)이 주어진닀. 단, N은 ν™€μˆ˜μ΄λ‹€. κ·Έ λ‹€μŒ N개의 μ€„μ—λŠ” μ •μˆ˜λ“€μ΄ 주어진닀. μž…λ ₯λ˜λŠ” μ •μˆ˜μ˜ μ ˆλŒ“κ°’μ€ 4,000을 λ„˜μ§€ μ•ŠλŠ”λ‹€.


πŸ˜‚μΆœλ ₯

첫째 μ€„μ—λŠ” μ‚°μˆ ν‰κ· μ„ 좜λ ₯ν•œλ‹€. μ†Œμˆ˜μ  μ΄ν•˜ 첫째 μžλ¦¬μ—μ„œ λ°˜μ˜¬λ¦Όν•œ 값을 좜λ ₯ν•œλ‹€.

λ‘˜μ§Έ μ€„μ—λŠ” 쀑앙값을 좜λ ₯ν•œλ‹€.

μ…‹μ§Έ μ€„μ—λŠ” μ΅œλΉˆκ°’μ„ 좜λ ₯ν•œλ‹€. μ—¬λŸ¬ 개 μžˆμ„ λ•Œμ—λŠ” μ΅œλΉˆκ°’ 쀑 두 번째둜 μž‘μ€ 값을 좜λ ₯ν•œλ‹€.

λ„·μ§Έ μ€„μ—λŠ” λ²”μœ„λ₯Ό 좜λ ₯ν•œλ‹€.


🀣예제

예제 μž…λ ₯ 1 
5
1
3
8
-2
2
예제 좜λ ₯ 1 
2
2
1
10
예제 μž…λ ₯ 2 
1
4000
예제 좜λ ₯ 2 
4000
4000
4000
0
예제 μž…λ ₯ 3 
5
-1
-2
-3
-1
-2
예제 좜λ ₯ 3 
-2
-2
-1
2
예제 μž…λ ₯ 4 
3
0
0
-1
예제 좜λ ₯ 4 
0
0
0
1

(0 + 0 + (-1)) / 3 = -0.333333... 이고 이λ₯Ό 첫째 μžλ¦¬μ—μ„œ λ°˜μ˜¬λ¦Όν•˜λ©΄ 0이닀. -0으둜 좜λ ₯ν•˜λ©΄ μ•ˆλœλ‹€.


πŸ˜ƒμΆœμ²˜

  • 데이터λ₯Ό μΆ”κ°€ν•œ μ‚¬λžŒ: bjh3502, bsyun0571, djm03178, jungyh1509, kongum, palilo, YunGoon
  • 문제의 μ˜€νƒ€λ₯Ό 찾은 μ‚¬λžŒ: jh05013, skynet

πŸ˜„μ•Œκ³ λ¦¬μ¦˜ λΆ„λ₯˜

  • μˆ˜ν•™
  • κ΅¬ν˜„
  • μ •λ ¬

πŸ˜Žλ‚˜μ˜ν’€μ΄

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split("\n").map(Number)
input.shift()
input.sort((a, b) => a-b)
const len = input.length
const sums = input.reduce((acc, cur) => acc+cur, 0)
const average = Math.round(sums/len)
const middle = input[Math.floor(len/2)]
const frequency = {}
for(let i = 0 ; i < len ; i ++) {
    const curNum = input[i]
    frequency[curNum] = frequency[curNum] ?? 0
    frequency[curNum] += 1
}
const maxFrequency = Math.max(...Object.values(frequency))
const maxFrequencies = []
for(const key in frequency) {
    const curVal = frequency[key]
    if(curVal === maxFrequency) {
        maxFrequencies.push(key)
    }
}
maxFrequencies.sort((a, b) => a-b)
let mostFrequentVal
if(maxFrequencies.length > 1) {
    mostFrequentVal = maxFrequencies[1]
} else {
    mostFrequentVal = maxFrequencies[0]
}
const rangeOfNums = (input.at(-1) - input[0])
console.log(
    average+"\n"+
    middle+"\n"+
    mostFrequentVal+"\n"+
    rangeOfNums
)
profile
λ‚΄ 지식을 κ³΅μœ ν•  수 μžˆλŠ” λŒ€λ‹΄ν•¨

0개의 λŒ“κΈ€