정렬) 안테나

Mongle·2020년 12월 4일
0

안테나

<이것이 코딩테스트이다, 360p, 나동빈, 한빛미디어>

첫번째 접근

  • (안테나의 위치 - 집의 위치)의 절대값을 저장해서 가장 작은 값의 인덱스를 반환하는 방법
# 집의 개수 입력
house_n = int(input("N >> "))

# 집의 위치 입력
houses = [int(x) for x in input('집의 위치 >> ').split()]

# 집의 위치에서 가장 큰 값이 점의 개수
N = max(houses)

# results에 안테나의 위치에 따른 집까지의 거리의 합을 저장
results = []
# 1부터 N까지 반복, 안테나의 위치
for i in range(1, N+1):
    # vlaue 0으로 초기화
    value = 0
    # 집의 위치를 하나씩 가져와서 안테나와의 거리(distance) 저장
    for house in houses:
        distance = house - i
        # 거리가 음수면 양수로 바꿈
        if distance < 0:
            distance = -distance
        # 거리의 합을 value에 저장
        value += distance
    # 각각의 거리의 합을 result에 저장, (result의 인덱스 값 + 1)이 실제 집의 위치
    results.append(value)

# 저장된 거리 중 최소값 저장
min_num = min(results)

# enumerate를 사용해서 최소값의 인덱스 반환
for i, d in enumerate(results):
    if d == min_num:
        print(i+1)
        break

다른 풀이

  • 충격 😨😨😨😨😨
n = int(input("n >> "))
data = list(map(int, input().split()))
data.sort()

# 중간값 출력
print(data[(n-1)//2])

중학교때 공부했던 것 같다ㅎㅎ
최단 거리를 구할 때는 모든 점의 중간값부터 의심해봐야한다..ㅠㅠ

profile
https://github.com/Jeongseo21

0개의 댓글