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 |