코딩테스트/BOJ

[백준] 18310. 안테나

박소민 2023. 2. 25. 14:23
18310. 안테나
 

18310번: 안테나

첫째 줄에 집의 수 N이 자연수로 주어진다. (1≤N≤200,000) 둘째 줄에 N채의 집에 위치가 공백을 기준으로 구분되어 1이상 100,000이하의 자연수로 주어진다.

www.acmicpc.net

 

  • 첫 풀이
    • 시간초과
    • (1≤N≤200,000) 이기 때문에 완탐을 해서 될 문제는 아님
from collections import deque
n=int(input())
lst=list(map(int,input().split()))
lst.sort()
home=deque()
for i in range(n):
    home.append(lst[i])
answer=1e9
idx=0

while home:
    q=home.popleft()
    result=0
    for l in lst:
        result+=abs(q-l)
    if answer>result:
        answer=result
        idx=q

print(idx)

 

  • 두번째 풀이
  • 개수가 홀수개여도 중간값 2개 다 거리계산하면 동일하기때문에 둘다 상관X
    • 아래 코드는 홀수일때 len(lst)//2 가 이미 중간값이기 때문에 오답
  • 홀짝 상관없이 인덱스 중간값: 하나 빼고 /2
    • (len(lst)-1)//2 
n=int(input())
lst=list(map(int,input().split()))
lst.sort()

#개수가 홀수개여도 중간값 2개 다 거리계산하면 동일하기때문에 둘다 상관X
#아래 코드는 홀수일때 len(lst)//2 가 이미 중간값이기 때문에 오답
print(lst[len(lst)//2-1])

 

  • 다른 사람 풀이
    • 정렬한 후 중간값에서 거리 계산하는 것이 최소가 된다
    • 중간값이 아닌 위치가 되면 중간값에서 계산한 거리보다 계속 1씩 더 늘어나서 최소가 불가능
n=int(input())
lst=list(map(int,input().split()))
lst.sort()

#개수가 홀수개여도 중간값 2개 다 거리계산하면 동일하기때문에 둘다 상관X
#아래 코드는 홀수일때 len(lst)//2 가 이미 중간값이기 때문에 오답
#print(lst[len(lst)//2-1])

#인덱스 맞추려면 1개빼고 //2
print(lst[(len(lst)-1)//2])

'코딩테스트 > BOJ' 카테고리의 다른 글

[백준] [실버 1] [BFS] 돌다리  (0) 2023.02.28
[백준][골드4] 1715. 카드 정렬하기  (0) 2023.02.26
[백준] [BFS] 1697. 숨바꼭질  (0) 2023.02.23
[백준][실버4] 10825. 국영수  (0) 2023.02.22
[백준 15686] 치킨 배달  (0) 2023.02.22