[백준] 2405번 세 수, 두 M

거북이·2023년 3월 2일
0

백준[골드4]

목록 보기
16/59
post-thumbnail

💡문제접근

  • 맨 첫 번째 수와 맨 마지막 수는 중위값으로 나올 수 없는 숫자이다.
  • 따라서 for문의 범위를 설정할 때 for i in range(1, N-1)로 설정해야한다.
  • 맨 첫 번째 수와 맨 마지막 수가 들어가므로 중간에 들어올 수 있는 수는 li[i]로 이 숫자가 중위값이 된다.
  • 평균값은 (li[i] + li[j] + li[k]) / 3인데 중위값과 평균값의 차이를 3배한 결과를 출력하는 것이므로 절댓값 처리를 해주어 li[i] + li[j] + li[k] - 3 *- med가 된다. 이 때, med는 중위값이다.

💡코드(메모리 : 35440KB, 시간 : 168ms)

import sys
input = sys.stdin.readline

N = int(input())
li = []
for _ in range(N):
    li.append(int(input()))
li.sort()

Max = -1
for i in range(1, N-1):
    average_Min = (li[0] + li[i] + li[i+1])         # 평균값의 최소값
    average_Max = (li[i-1] + li[i] + li[N-1])       # 평균값의 최대값
    if abs(average_Min - li[i] * 3) > Max:
        Max = abs(average_Min - li[i] * 3)

    if abs(average_Max - li[i] * 3) > Max:
        Max = abs(average_Max - li[i] * 3)
print(Max)

💡소요시간 : 1day

0개의 댓글