Algorithm

[Python] λ°±μ€€ 2108 - 톡계학

πŸ₯­Mango 2020. 9. 30. 00:47

문제

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

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

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

 

μž…λ ₯

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

 

좜λ ₯

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

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

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

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


μ •λ‹΅

import sys
from collections import Counter
n = int(sys.stdin.readline())
s = []
for i in range(n):
    s.append(int(sys.stdin.readline()))
s.sort()

print(round(sum(s)/n))

print(s[n//2])

c = Counter(s).most_common()
if len(s) > 1:
    if c[0][1] == c[1][1]:
        print(c[1][0])
    else:
        print(c[0][0])
else:
    print(c[0][0])

print(s[-1] - s[0])

 

[μ°Έκ³ ]

Counter 클래슀

from collections import Counter
a = 'aabbbcccc'
print(Counter(a))

#Counter({'c': 4, 'b': 3, 'a': 2})

μ΄λŸ°μ‹μœΌλ‘œ 개수λ₯Ό μ…€ 수 μžˆλ‹€.

 

μœ„ μ •λ‹΅μ½”λ“œμ—μ„œ μ“΄ κ²ƒμ²˜λŸΌ most_common()μ΄λΌλŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μƒμœ„μš”μ†Œλ₯Ό λ°˜ν™˜ν•΄μ€€λ‹€.

a = 'aabbbcccc'
print(Counter(a).most_common(2))
print(Counter(a).most_common(1))
print(Counter(a).most_common())

#[('c', 4), ('b', 3)]
#[('c', 4)]
#[('c', 4), ('b', 3), ('a', 2)]

2λ₯Ό λ„£μœΌλ©΄ 2개, 1을 λ„£μœΌλ©΄ 1개, λ„£μ§€ μ•ŠμœΌλ©΄ 전체 μš”μ†Œλ₯Ό 좜λ ₯ν•œλ‹€.