파이썬 문제 풀이 부탁드립니다. ㅜㅜ 어렵네요
조회수 296회
회사는 매년 정기적으로 직원들의 건강검진을 실시하여 혈압을 측정하고 있으며, 혈압 수치에는 수축기 혈압(높음)과 확장기 혈압(낮음)이 있습니다. 회사는 전 직원의 두 가지 혈압 값을 측정한 후 전 직원의 수축기 혈압과 확장기 혈압의 평균과 중앙값을 계산해 출력합니다.
숫자 문자열의 중앙값은 숫자가 순서대로 중앙에 배치된 값입니다. 예를 들어 3,7,1,9,5의 중앙값은 5이고 5,8,2,6의 중앙값은 5와6의 평균값이다. (소수점에서 무조건 반올림).
직원의 두 혈압에 대한 중앙값 계산을 완료하려면 split − range() 함수를 완료하는 데 도움을 주세요. (참고: 이 프로그램은 중앙값을 찾기 위해 정렬을 사용하지 않습니다.)
입력 형식:
n: 직원 수 ha1, …, han: 직원의 수축기 혈압 hb1, …, hbn: 직원의 확장기 혈압
출력 형식: ha_avg : 직원 평균 수축기 혈압 hb_avg : 직원 평균 확장기 혈압 ha_md : 직원의 수축기 혈압 중앙값 hb_md : 직원의 확장기 혈압 중앙값
조건 def split_range(pivot_position, mid, left, right): 함수
pivot_position: 분할점 위치
mid: 중간 위치
left: 왼쪽 끝 정렬
right: 오른쪽 끝 정렬
이 함수는 split 함수(pivot_position)를 호출한 결과에 따라 탐색 범위를 점차적으로 좁힙니다.
def split_range(pivot_position,mid,left,right):
샘플 자료:
1.
input
5
139 93 121 142 116
68 89 58 67 83
122
73
121
68
2.
input
4
125 132 130 108
96 67 82 96
123
85
127
89
3.
input
3
149 147 119
77 68 70
138
71
147
70
4.
input
10
108 140 141 132 140 100 116 116 94 90
89 55 84 77 79 91 74 72 85 99
117
80
116
81
5.
input
1
134
55
134
55
134
55
def average(data, n):
avg =0
for x in data:
avg += x
return avg//n
def split(data, left, right):
pivot = data[left]
pivot_position = left
for i in range(left+1,right+1):
if data[i] < pivot:
pivot_position += 1
data[i], data[pivot_position] = data[pivot_position], data[i]
data[left], data[pivot_position] = data[pivot_position], data[left]
return pivot_position
def split_range(pivot_position, mid, left, right):
???????????????????????????????????????????????????????????????????????????????
def half(data, n):
value = data[n//2]
for i in range(n//2,n):
if data[i] < value:
value = data[i]
return value
def median(data, n):
left = 0
right = n-1
mid = (left+right)//2
while(True):
pivot_position = split(data, left, right)
if pivot_position == mid:
break
else:
left,right = split_range(pivot_position, mid, left, right)
if n%2 == 1:
return data[mid]
else:
return (data[mid] + half(data, n))//2
num = int(input())
systolic = list(map(int,input().split()))
diastolic = list(map(int,input().split()))
sy_average = average(systolic, num)
dia_average = average(diastolic, num)
sy_median = median(systolic, num)
dia_median = median(diastolic, num)
print(sy_average, dia_average, sy_median, dia_median,sep='\n')
중간 물음표 란에 어떤 코드를 써야될까요? ㅠㅠ 문제 풀이 부탁드립니다 되신다면 해석도 부탁드리겠습니다 언제나 감사드립니다!
댓글 입력