[이코테] 정렬_안테나 (python)

juyeon·2022년 7월 4일
0

문제

n수가 주어짐.
n수 만큼의 집이 존재.
집은 일직선상에 위치하며, 동일한 위치에 여러 개의 집이 존재 가능.
한 집에 안테나를 설치할 때, 모든 집 까지의 거리의 합이 최소가 되는 집의 위치는?
단, 안테나를 설치할 수 있는 위치 값으로 여러 개의 값이 도출될 경우 가장 작은 값을 출력

나의 풀이

1. 실패

#이코테_정렬_안테나
n = int(input())
#집을 정렬하여 list에 담음
house = list(map(int, input().split())).sort()
#안테나에서 모든 집까지의 거리를 담을 list 생성
result = list(([0] * n) for _ in range(n))
#안테나에서 모든 집까지의 거리의 총합을 담을 list 생성
count = []
for i in range(n):
	for j in range(n):
		#안테나 - 집까지의 거리의 절대값을 list에 담음
		result[i][j]= abs(house[i] - house[j])
	#안테나에서 모든 집까지의 거리의 총합을 list에 담음
	count.append(sum(result[i]))
#가장 작은 값 출력
print(min(count))

2. 성공

n = int(input())
#집을 list에 담고, 정렬
house = sorted(list(map(int, input().split())))

#중앙값 출력
print(house[(n - 1) // 2])

: 중앙값을 출력할 때, house[(n - 1) // 2]인 이유는?

  • n = 홀수일 때
    : ex. n = 5:
    1, 3, 5, 7, 9
    -> 중앙값은 5
    즉, index로 따지면.. (5 - 1) / 2번째 인덱스
  • n = 짝수일 때
    : ex. n = 4:
    1, 5, 7, 9, 11, 20, 29, 120
    -> 중앙값은 5 + 7 의 평균 = 6. 근데 본 문제에서 안테나는 집이 위치한 곳에 설치하므로, 이 경우 중앙값은 5와 7 중 앞에 있는 수인 5 선택
    즉, 안테나를 설치할 수 있는 위치 값으로 여러 개의 값이 도출될 경우 가장 작은 값을 출력이라는 조건이 있기 때문!

홀수 일 때는 [(n - 1) / 2]
짝수 일 때는 [(n / 2) - 1] = [(n - 1) // 2]
-> 이 둘을 충족시키는 식은 [(n - 1) // 2]

profile
내 인생의 주연

0개의 댓글