λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/BOJ

[BOJ] 톡계학 (#2108)

 

 

문제 

 

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

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

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

 

 

μž…λ ₯ 

 

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

 

 

좜λ ₯ 

 

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

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

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

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

 

 

λ‚˜μ˜ μ½”λ“œ 
import sys 
put = sys.stdin.readline
n = int(put())
count_array = []
me = []

array = [int(put()) for x in range(n)]
array.sort()

# μ‚°μˆ ν‰κ· 
average = round(sum(array) / len(array))

# 쀑앙값
if len(array) > 1:
  middle = array[int((len(array) -1) / 2)]
else:
  middle = array[0]

# μ΅œλΉˆκ°’
for i in array:
  count_array.append(array.count(i))

for i in array:
  if max(count_array) == array.count(i):
    me.append(i)
me_1 = list(set(me))
me_1.sort(reverse=False)

if len(me_1) > 1:
  answer = me_1[1]
else:
  answer = me_1[0]

# λ²”μœ„
range_answer = max(array) - min(array)

print(average)
print(middle)
print(answer)
print(range_answer)
뢄석 > for 문을 μ„Έλ²ˆμ΄λ‚˜ μ¨μ„œ μ‹œκ°„μ΄ˆκ³Όκ°€ λ–΄λ˜ μ½”λ“œμ΄λ‹€. μ΅œλΉˆκ°’μ„ κ΅¬ν•˜λŠ” μ½”λ“œλ₯Ό 반볡문으둜 쓰지 μ•Šκ³  κ΅¬ν•˜λŠ” 방법이 μžˆμ„ κ±° κ°™μ•˜λŠ”λ°, κ·Έ 방법을 λͺ°λΌμ„œ κ³ μΉ˜μ§€ λͺ»ν–ˆλ‹€. 

 

효율적인 μ½”λ“œ 
import sys 
from collections import Counter

put = sys.stdin.readline
n = int(put())

array = [int(put()) for x in range(n)]
array.sort()

# μ‚°μˆ ν‰κ· 
average = round(sum(array) / len(array))
print(average)

# 쀑앙값
if len(array) > 1:
  middle = array[int((len(array) -1) / 2)]
else:
  middle = array[0]
print(middle)

# μ΅œλΉˆκ°’
cnt = Counter(array).most_common(2)
if len(array) > 1:
  if cnt[0][1] == cnt[1][1]:
    print(cnt[1][0])
  else:
    print(cnt[0][0])
else:
  print(cnt[0][0])

# λ²”μœ„
range_answer = max(array) - min(array)
print(range_answer)
뢄석 > μ΅œλΉˆκ°’μ„ κ΅¬ν•˜λŠ” λ‚΄μž₯ν•¨μˆ˜κ°€ μžˆλ‹€λŠ” κ±Έ 처음 μ•Œκ²Œ λ˜μ—ˆλ‹€. from collections import Counterλ₯Ό ν•œ 후에 cnt 값을 Counter(array).most_common(κ΅¬ν•˜λ €λŠ” μ΅œλΉˆκ°’ 개수)을 μ‚¬μš©ν•˜λ©΄ 2차원 λ°°μ—΄ ν˜•νƒœλ‘œ 각 μ›μ†Œκ°€ λͺ‡ κ°œκ°€ μžˆλŠ” 지 λ‚˜νƒ€λ‚Ό 수 μžˆμ—ˆλ‹€. 

 

 

 

 

2108번: 톡계학

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

www.acmicpc.net

 

'Algorithm > BOJ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] λΈ”λž™μž­ (#2798)  (0) 2022.04.11
[BOJ] λ¬Έμžμ—΄ 폭발 (#9935)  (0) 2022.04.11
[BOJ] ν•™μƒλ²ˆν˜Έ (#1235)  (0) 2022.04.11
[BOJ] 단어정렬 (#1181)  (0) 2022.04.09
[BOJ] κ·Έλ£Ή 단어 체컀 (#1316)  (0) 2022.04.09