[백준]/python

[백준] 대표 자연수(2548) - python

0_TLS 2025. 1. 7. 20:42

<제출 코드> - 시간 초과

import sys

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

num = map(int, input().split())
total = 0
tmp = []
num = list(num)
answer = []

for i in range(n):
    for j in range(n):
        total += abs(num[i] - num[j])
    tmp.append(total)
    total = 0
    
for i in range(len(tmp)):
    if tmp[i] == min(tmp):
        answer.append(num[i])
print(min(answer))

 

이렇게 풀면 바보

 

 

모든 값을 계산할 필요가 없음. 

차이를 최소로 하려면 중앙값을 골라야한다!

 

<수정한 코드>

import sys

input = sys.stdin.readline
n = int(input())
num = list(map(int, input().split()))
num.sort()
if n%2 == 0:
    print(num[n//2 -1])
else:
    print(num[n//2])

 

=> num[(n-1)//2] 이렇게 풀어도 됨.

이렇게 하면 짝수인경우 자동으로 더 작은 값을 고른다

import sys

input = sys.stdin.read
data = input().split()
N = int(data[0])  # 숫자의 개수
numbers = list(map(int, data[1:]))
numbers.sort()

# 중앙값 찾기
# N이 짝수일 경우, 두 중앙값 중 작은 값 사용 (정렬 기준으로 자동으로 작은 값 선택)
median = numbers[(N - 1) // 2]

# 결과 출력
print(median)