본문 바로가기
Algorithm

백준 18310번 <안테나>

by seungh2 2022. 6. 8.

백준 알고리즘 18310번

https://www.acmicpc.net/problem/18310

 

18310번: 안테나

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

www.acmicpc.net


18310번

일직선 상에 위치한 여러 채의 집이 있다. 특정 위치의 집에 한 개의 안테나를 설치하기로 했다. 효율성을 위해 안테나로부터 모든 집까지 거리의 총 합이 최소가 되어야 한다. 어느 집에 설치해야 하는지 구하여라.

 

입력으로 첫 줄에 집의 개수 N이 들어오고 그 다음 줄에 N개의 집의 위치가 들어온다.

 

출력으로 안테나를 설치할 집의 위치를 출력하면 된다. 안테나를 설치할 수 있는 위치 값이 여러 개가 된다면 가장 작은 값을 출력하면 된다.


문제 해결

처음엔 이진 탐색으로 풀어야 하는 줄 알았는데 이진 탐색으로 풀지 않아도 된다.

 

안테나는 N개의 집을 정렬했을 때, 가운데의 위치에 설치하면 된다.

왜냐면 N개의 집을 정렬했기 때문에 가운데의 위치에 설치해야 안테나로부터의 거리의 합이 최소가 된다.

(당연한 얘기인데 왜 생각을 못했을까)


코드

package bj18310;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		String[] inArr = br.readLine().split(" ");
		int[] antenna = new int[n];
		for (int i = 0; i < n; i++) {
			antenna[i] = Integer.parseInt(inArr[i]);
		}
		Arrays.sort(antenna);
		int mid = (n - 1) / 2;
		while (mid > 0) {
			if (antenna[mid] == antenna[mid - 1]) {
				mid--;
			} else {
				break;
			}
		}
		System.out.println(antenna[mid]);

	}

}

결과


 

728x90

'Algorithm' 카테고리의 다른 글

백준 6118번 <숨바꼭질>  (0) 2022.06.10
백준 17087번 <숨바꼭질 6>  (0) 2022.06.09
백준 2004번 <조합 0의 개수>  (0) 2022.06.07
백준 14889번 <스타트와 링크>  (0) 2022.06.06
백준 1676번 <팩토리얼 0의 개수>  (0) 2022.06.06

댓글