π λ¬Έμ
https://www.acmicpc.net/problem/2108
π νμ΄
μ΄ μΈκ°μ§ λ°©λ²μΌλ‘ νμ΄λ³΄μμ΅λλ€. κ°μΈμ μΌλ‘λ Counter λͺ¨λλ‘ νΈλ λ°©λ²μ΄ κ°μ₯ κΉλνκ³ λ§μμ λ€μμ΅λλ€π₯
μ°μ νκ· , μ€μκ°, λ²μλ μλμ κ°μ΄ λ¬Έμ μ κ·Έλλ‘ λμμμ΄μ λΆκ°μ μΈ μ€λͺ μ νμ§μκ² μ΅λλ€:) νΉμλ κΆκΈνμλ©΄ λκΈμ£Όμλ©΄ μ€λͺ λλ¦¬κ² μ΅λλ€.
- μ°μ νκ· : Nκ°μ μλ€μ ν©μ NμΌλ‘ λλ κ°
- μ€μκ° : Nκ°μ μλ€μ μ¦κ°νλ μμλ‘ λμ΄νμ κ²½μ° κ·Έ μ€μμ μμΉνλ κ°
- μ΅λΉκ° : Nκ°μ μλ€ μ€ κ°μ₯ λ§μ΄ λνλλ κ°
- λ²μ : Nκ°μ μλ€ μ€ μ΅λκ°κ³Ό μ΅μκ°μ μ°¨μ΄
1. 첫λ²μ§Έ λ°©λ² : Counter
counterλ collectionsμ λν λμμ μ 곡νλ λͺ¨λ μ€ νλλ‘, ν΄μ κ°λ₯ν κ°μ²΄λ₯Ό μΈλ λ° μ¬μ©νλ λμ λ리 μλΈ ν΄λμ€μ λλ€.
μμκ° λμ λ리 ν€λ‘, κ°μκ° λμ λ리 κ°μΌλ‘ μ μ₯λ©λλ€. κ°μλ 0 λλ μμλ₯Ό ν¬ν¨νλ μμ μ μ«κ°μ΄ λ μ μμ΅λλ€.
λ€λ₯Έ μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό νλλ μ μ©ν©λλ€!β¨ documentationdμ μλλ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ! (μμ μ½λλ μλ΅λλ€!)
* documentaition : https://docs.python.org/ko/3/library/collections.html
[μ 체 μ½λ]
# μ΅μ’
μ μΆμ½λ(1)
import sys
from collections import Counter
N = int(sys.stdin.readline())
numbers = sorted([int(sys.stdin.readline()) for _ in range(N)])
# μ°μ νκ·
print(round(sum(numbers) / N))
# μ€μκ°
print(numbers[N // 2])
# μ΅λΉκ°
count_list = sorted(Counter(numbers).items(), key = lambda x : (-x[1], x[0]))
if N == 1:
print(numbers[0])
else:
if count_list[0][1] != count_list[1][1]:
print(count_list[0][0])
else:
print(count_list[1][0])
# λ²μ : μ΅λκ° - μ΅μκ°
print(max(numbers) - min(numbers))
[ν΄μ€]
π₯ μ΅λΉκ° μ€λͺ
1. Counterλ₯Ό μ΄μ©ν΄μ κ°―μλ₯Ό μΌλ€.
2. 1λ²μ κ°μ λμ
λ리μ΄λ―λ‘, items λ©μλλ₯Ό μ΄μ©ν΄μ (key, value) ννμ λ½λλ€.
3. λ¬Έμ μ μ μλ 쑰건μ λ°λΌ, value(μΉ΄μ΄ν
κ°―μ) - key(μ«μ μ체) μμΌλ‘ μ λ ¬νλ€.
* μ λ ¬μ κ΄λ ¨ν΄μ ν·κ°λ¦¬μλ©΄, https://imdona.tistory.com/14?category=985565 λ€μ€ 쑰건 μ λ ¬ ν¬μ€νΈ μ°Έκ³ λ°λλλ€ π
4. μΈλ±μ€ λ²μ μ΄κ³Ό λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ,
N = 1μΌλλ μκΈ°μμ μ΄ μ΅λΉκ°μΌλ‘
N > 1μΌλλ μ΅λΉκ°μ΄ ν κ°μΌ λ(= μ λ ¬ν 리μ€νΈμ 첫λ²μ§Έμ λλ²μ§Έ κ°μ΄ λ€λ₯Ό λ)λ ν΄λΉ κ°μ
μ΅λΉκ°μ΄ λ κ° μ΄μμΌ λλ λ λλ²μ§Έ κ°(μΈλ±μ€λ²νΈλ 1λ²)μ νλ¦°νΈνλ ifλ¬ΈμΌλ‘ ꡬμ±νμλ€.
## νμ΄ λ°©λ² μ€λͺ
# readline κΉλ¨Ήμ§μκ² μ¬μ©νλ©΄μ μΉν΄μ§κΈ°!
import sys
from collections import Counter
N = int(sys.stdin.readline())
numbers = sorted([int(sys.stdin.readline()) for _ in range(N)])
# μ°μ νκ· : ν©κ³ / κ°―μ
# print("----------------")
# print(f"μ°μ νκ· : {round(sum(numbers) / N)}")
print(round(sum(numbers) / N))
# μ€μκ° : μ λ ¬ν΄μ μ€κ°μμΉ - μΈλ±μ€λ λͺ«μΌλ‘
print(numbers[N // 2])
# μ΅λΉκ° : κ°μ₯ λ§μ΄ λνλλ κ°
count_list = sorted(Counter(numbers).items(), key = lambda x : (-x[1], x[0]))
# print(count_list)
if N == 1:
print(numbers[0])
else:
if count_list[0][1] != count_list[1][1]:
print(count_list[0][0])
else:
print(count_list[1][0])
# λ²μ : μ΅λκ° - μ΅μκ°
print(max(numbers) - min(numbers))
2. λλ²μ§Έ λ°©λ² : statistics
μ°μ pythonμ statistics λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄, μ°μ νκ· , μ€μκ°, λ²μλ μ΄λ―Έ ꡬνλ λ©μλλ‘ μ½κ² νμ΄κ° κ°λ₯ν©λλ€.
μ΅λΉκ°μ μ¬μ€ 1λ² νμ΄ λ°©λ²κ³Ό λκ°μ κ² κ°μμ λ€λ₯Έ λ°©λ²μ μ°κ΅¬(?)ν΄λ³΄λ€κ° λ°κ²¬ν λ©μλλ₯Ό νμ©ν΄μ νμ΄λ³΄μμ΅λλ€.
[μ 체 μ½λ]
# μ΅μ’
μ μΆμ½λ(2)
import sys
import statistics as st
from collections import Counter
N = int(sys.stdin.readline())
numbers = [int(sys.stdin.readline()) for _ in range(N)]
print(round(st.mean(numbers)))
print(st.median(numbers))
count_list = sorted(Counter(numbers).most_common(), key = lambda x : (-x[1], x[0]))
if N == 1:
print(numbers[0])
else:
if count_list[0][1] != count_list[1][1]:
print(count_list[0][0])
else:
print(count_list[1][0])
print(max(numbers)-min(numbers))
[ν΄μ€]
π₯ μ΅λΉκ° μλ‘μ΄ method μ¬μ©ν΄λ³΄κΈ°
Counterμ most_common( )μ΄λΌλ λ©μλμ μ¬μ©νλ©΄ μ‘°κΈ λ κ°λ¨ν μ½λλ‘ μ²« λ²μ§Έ νμ΄ λ°©λ²κ³Ό λκ°μ΄ (μ«μ, μΉ΄μ΄ν
)μ ννννλ‘ return λ©λλ€.
π collections.Counter(a).most_common(n) : aμ μμλ₯Ό μΈμ΄, 리μ€νΈμ λ΄κΈ΄ ννννλ‘ μ΅λΉκ° nκ°λ₯Ό λ°ννλ λ©μλ
β‘οΈ documentationμ 보면 λμΌν κ°―μμ μμλ μ²μ λ°μν μμλλ‘ μ λ ¬μ΄ λμ΄μ, μ λ ¬ λ° ifλ¬ΈμΌλ‘ νμΈν΄μ£Όλ μ μ°¨λ νμν΄μ!
* collections documentation : https://docs.python.org/3/library/collections.html
'''statistics λΌμ΄λΈλ¬λ¦¬ importν΄μ νκΈ° - μ°μ νκ· , μ€μκ°, λ²μ'''
import sys
import statistics as st
from collections import Counter
N = int(sys.stdin.readline())
numbers = [int(sys.stdin.readline()) for _ in range(N)]
print(f"μ°μ νκ· : {round(st.mean(numbers))}")
print(f"μ€μκ° : {st.median(numbers)}")
print(f"λ²μ : {max(numbers)-min(numbers)}")
# μ΅λΉκ°
count_list = sorted(Counter(numbers).most_common(), key = lambda x : (-x[1], x[0]))
if N == 1:
print(numbers[0])
else:
if count_list[0][1] != count_list[1][1]:
print(count_list[0][0])
else:
print(count_list[1][0])
3. μΈλ²μ§Έ λ°©λ² : forλ°λ³΅λ¬Έ
μ΄ λ°©λ²μ μ²μμ Counter λͺ¨λμ μκ°νμ§ λͺ»νμ λ, μ μΌ λ¨Όμ λ€μλ μμ΄λμ΄μμ΅λλ€! π‘
νκ³ λ³΄λ Counter λͺ¨λμ ν΅ν΄ ꡬνν κ²κ³Ό λκ°μ outputμ μ μμΌλ‘ λ§λ λλμ΄κΈ΄ νμ΅λλ€(?) βπ©π³
μ λ λ¬Έμ μμ "κ·Έ λ€μ Nκ°μ μ€μλ μ μλ€μ΄ μ£Όμ΄μ§λ€. μ λ ₯λλ μ μμ μ λκ°μ 4,000μ λμ§ μλλ€." κΈμ λ³΄κ³ 4000 μ λλ©΄ μμλ μμ κ·Έλ¦¬κ³ 0μ λͺ¨λ ν΄λ κ°μκ° 8001κ°λΏμ΄λΌ μ»΄ν¨ν°μκ² μ ν λ¬΄λ¦¬κ° κ° μ«μκ° μλλΌκ³ μκ°ν΄μ forλ¬ΈμΌλ‘ νμ΄λ³΄κ³ μΆλλΌκ΅¬μ(?) κ²°λ‘ μ μΌλ‘λ λΉμ·νμ§λ§, μ§μ ν΄λ³΄λ μμ΄ νλ ¨νλ€μ. λ κΉ μλ κΉ νΌμ κ³ λ―Όνλ κ±°λ³΄λ€ μ½λλ‘ μ§μ μ³λ³΄λκ² μ΅κ³ ..π
[μ 체 μ½λ]
# μ΅μ’
μ μΆμ½λ(3)
import sys
N = int(sys.stdin.readline())
numbers = sorted([int(sys.stdin.readline()) for _ in range(N)])
# μ°μ νκ·
print(round(sum(numbers) / N))
# μ€μκ°
print(numbers[N // 2])
# μ΅λΉκ°
# μ«μ, countλ‘ λ¦¬μ€νΈ λ§λ€κΈ°
count = []
for i in range(-4000, 4001):
count.append([i, 0])
# numμ λλ©΄μ ν΄λΉ μ«μλ₯Ό νννλ μΈλ±μ€λ²νΈμ 1μ μΆκ°ν΄μ€λ€
for num in numbers:
count[num + 4000][1] += 1
# κ°―μ κΈ°μ€μΌλ‘ μ λ ¬
count.sort(key = lambda x: (-x[1], x[0]))
# μΆλ ₯
if N == 1:
print(numbers[0])
else:
if count[0][1] != count[1][1]:
print(count[0][0])
else:
print(count[1][0])
# λ²μ : μ΅λκ° - μ΅μκ°
print(max(numbers) - min(numbers))