티스토리 뷰

ps

BOJ 2405(세 수, 두 M)풀이

KWG07(joseph0528) 2021. 9. 2. 19:47

https://www.acmicpc.net/problem/2405

 

2405번: 세 수, 두 M

n개의 정수 A[1], A[2], …, A[n]이 있다. 서로 다른 세 정수 i, j, k에 대해서 a = A[i], b = A[j], c = A[k]라 하자. 세 수의 중위(Median)값은 정렬했을 때 가운데에 오는 수가 된다. 세 수의 평균(Mean)값은 (a+b+c)

www.acmicpc.net

생각보다 간단한 문제다

평균과 중윗값의 차가 최대한 크게 하려면 일정한 중윗값에 대해서 평균이 최대한 크거나 작을 때의 차 중 가장 큰 차를 구하면 된다.

값을 정렬했을때 양끝 값은 중윗값이 될 수 없으니 제외해주고 1~n-1에서 i번째 값이 중위 값이라고 했을 때 평균값이 가장 작게 나오게 하려면 i번째 값+i+1번째 값+0번째을 더한 다음 3으로 나눴을 때 i번째를 중윗값으로 잡았을 때 가장 작게 나오는 평균값이다.

반대로 가장 크게 나오게할려면 i-1번째 값+i번째 값+n번째 값이 평균이 가장 크게 나오는 평균이다.

이렇게 1~n-1을 돌면서 나온 2n-2개의 값 중 가장 큰 값을 출력하면 된다.

a=int(input())
l=[int(input())for i in range(a)]
l.sort()
#print(l)
ma=0
for i in range(1,a-1):
    #print("#",(l[0]+l[i]+l[i+1]),(l[0]+l[i]+l[i+1])/3,l[i])
    #print(abs((l[0]+l[i]+l[i+1])/3-l[i])*3)
    ma=max(ma,abs((l[0]+l[i]+l[i+1])/3-l[i])*3)
    ma=max(ma,abs((l[i-1]+l[i]+l[a-1])/3-l[i])*3)
print(int(ma))

이렇게 짤수 있지만 이렇게 하면 틀리게 된다. 이유는 실수 오차 때문이다. 

a=int(input())
l=[int(input())for i in range(a)]
l.sort()
#print(l)
ma=0
for i in range(1,a-1):
    #print("#",(l[0]+l[i]+l[i+1]),(l[0]+l[i]+l[i+1])/3,l[i])
    #print(abs((l[0]+l[i]+l[i+1])/3-l[i])*3)
    ma=max(ma,abs((l[0]+l[i]+l[i+1])-3*l[i]))
    ma=max(ma,abs((l[i-1]+l[i]+l[a-1])-3*l[i]))
print(int(ma))

이렇게 짜면 해결 할 수 있다.

'ps' 카테고리의 다른 글

BOJ 7812(중앙 트리)풀이  (0) 2021.09.17
BOJ 16121(사무실 이전)풀이  (0) 2021.09.11
BOJ 17274(카드 공장 (Large))풀이  (0) 2021.08.15
BOJ 2243(사탕상자)풀이  (0) 2021.08.15
BOJ 20149(선분 교차 3)풀이  (0) 2021.08.14
댓글