-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmiddle_station.py
41 lines (36 loc) ยท 1.69 KB
/
middle_station.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import sys
import math
import dijkstra
def middle_station(station_info, line_info, user_info):
# ๋ค์ต์คํธ๋ผ
dijkstra_result = []
for i in user_info:
dijkstra_result.append(dijkstra.dijkstra(user_info[i], station_info, line_info))
# middle_station ํ์
middle_station = ""
min_sum_time = sys.float_info.max
min_sum_deviation = sys.float_info.max
for station in line_info: # ํ์ํ ์ญ ์ ์ฒด
print("ํ์ฌ ์ญ :", station)
user_distance = [] # user์์ ํด๋น ์ญ๊น์ง ๊ฑฐ๋ฆฌ์ ๋ฆฌ์คํธ
for i in range(len(user_info)):
#distance = "user ํ์น์์น -> ์์๋ณผ ์ญ์ ๊ฑฐ๋ฆฌ"
distance = dijkstra_result[i][station]
user_distance.append(distance)
print("ํฉ :", sum(user_distance))
# ํธ์ฐจ ๊ตฌํ๊ธฐ
average = sum(user_distance) / len(user_info) # ํ๊ท
user_deviation = list(map(lambda x: (x - average) ** 2, user_distance)) # ๊ฐ user์ ํธ์ฐจ
standard_deviation = math.sqrt(sum(user_deviation) / len(user_info)) # ํ์คํธ์ฐจ
print("ํ์คํธ์ฐจ :", standard_deviation)
# middle_station ์
๋ฐ์ดํธ
if sum(user_distance) < min_sum_time and standard_deviation <= 25:
middle_station = station
min_sum_time = sum(user_distance)
min_sum_deviation = standard_deviation
elif sum(user_distance) == min_sum_time and standard_deviation < min_sum_deviation and standard_deviation <= 25:
middle_station = station
min_sum_time = sum(user_distance)
min_sum_deviation = standard_deviation
print("ํ์ฌ ์ค๊ฐ์ง์ :", middle_station)
print()