[λ°±μ€€/python] 2108번 : 톡계학

2021. 4. 2. 17:43

문제

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

  1. μ‚°μˆ ν‰κ·  : N개의 μˆ˜λ“€μ˜ 합을 N으둜 λ‚˜λˆˆ κ°’
  2. 쀑앙값 : N개의 μˆ˜λ“€μ„ μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ λ‚˜μ—΄ν–ˆμ„ 경우 κ·Έ 쀑앙에 μœ„μΉ˜ν•˜λŠ” κ°’
  3. μ΅œλΉˆκ°’ : N개의 μˆ˜λ“€ 쀑 κ°€μž₯ 많이 λ‚˜νƒ€λ‚˜λŠ” κ°’
  4. λ²”μœ„ : N개의 μˆ˜λ“€ 쀑 μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ˜ 차이

N개의 μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, λ„€ 가지 κΈ°λ³Έ 톡계값을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

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

 

좜λ ₯

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

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

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

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

 

μ •λ‹΅

from collections import Counter
import sys

N = int(sys.stdin.readline())
numbers = []
for i in range(N):
    numbers.append(int(sys.stdin.readline()))
numbers.sort()

# μ‚°μˆ ν‰κ· 
print(round(sum(numbers)/N))

# 쀑앙값
print(numbers[N//2])

# μ΅œλΉˆκ°’
cnt = Counter(numbers).most_common()
mode = []
for i in cnt:
    if i[1] == cnt[0][1]:
        mode.append(i[0])
    else:
        break
if len(mode) == 1:
    print(mode[0])
else:
    mode.sort()
    print(mode[1])

# λ²”μœ„
print(max(numbers)-min(numbers))

μ‚°μˆ ν‰κ· μ€ sumκ³Ό roundλ₯Ό μ΄μš©ν•œλ‹€.

쀑앙값은 numbersλ₯Ό sortν•˜μ—¬ μ •λ ¬ν•œ ν›„ 쀑간 인덱슀λ₯Ό 좜λ ₯ν•œλ‹€.

λ²”μœ„λŠ” max와 min을 μ΄μš©ν•˜μ—¬ 좜λ ₯ν•œλ‹€.

 

μ΅œλΉˆκ°’μ€ Counter와 most_common을 μ΄μš©ν•œλ‹€.

# μ΅œλΉˆκ°’
cnt = Counter(numbers).most_common()
mode = []
for i in cnt:
    if i[1] == cnt[0][1]:
        mode.append(i[0])
    else:
        break
if len(mode) == 1:
    print(mode[0])
else:
    mode.sort()
    print(mode[1])

Counter을 μ΄μš©ν•˜μ—¬ 각 μˆ«μžκ°€ λ“±μž₯ν•œ 횟수λ₯Ό λ”•μ…”λ„ˆλ¦¬ ν˜•μ‹μœΌλ‘œ λ°˜ν™˜ν•˜κ³ 

most.common을 μ΄μš©ν•˜μ—¬ 횟수λ₯Ό λ‚΄λ¦Όμ°¨μˆœ μ •λ ¬ν•˜μ—¬ cnt에 μ €μž₯ν•œλ‹€.

λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν–ˆμœΌλ―€λ‘œ cnt의 첫번째 값이 μ΅œλΉˆκ°’μ΄ λœλ‹€.

 

λ”•μ…”λ„ˆλ¦¬ ν˜•μ‹μœΌλ‘œ μ €μž₯ν–ˆμœΌλ―€λ‘œ cnt[0][0]이 μ΅œλΉˆκ°’μ΄ 되고 cnt[0][1]이 λ“±μž₯ν•œ νšŸμˆ˜κ°€ λœλ‹€.

μ΅œλΉˆκ°’μ΄ μ—¬λŸ¬κ°œμΌ λ•Œ κ·Έ 쀑 λ‘λ²ˆμ§Έλ‘œ μž‘μ€ 수λ₯Ό 좜λ ₯ν•΄μ•Όν•˜λ―€λ‘œ μ΅œλΉˆκ°’μ„ mode λ¦¬μŠ€νŠΈμ— μ €μž₯ν•œλ‹€.

 

mode λ¦¬μŠ€νŠΈμ— 값이 ν•˜λ‚˜μΌ 경우 μ΅œλΉˆκ°’μ΄ ν•˜λ‚˜λΌλŠ” λœ»μ΄λ―€λ‘œ mode[0]을 좜λ ₯ν•˜κ³ 

mode λ¦¬μŠ€νŠΈμ— 값이 μ—¬λŸ¬κ°œμΌ 경우 μ΅œλΉˆκ°’μ΄ μ—¬λŸ¬κ°œλΌλŠ” λœ»μ΄λ―€λ‘œ 

modeλ₯Ό μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν•œ ν›„ λ‘λ²ˆμ§Έλ‘œ μž‘μ€ 수인 mode[1]을 좜λ ₯ν•œλ‹€.

728x90

BELATED ARTICLES

more