본문 바로가기
알고리즘 문제풀이

[Backjoon] 5054번 문제 - 주차의 신

by 마스터누누 2017. 6. 30.
728x90
반응형


선영이는 쇼핑하러 긴 도로에 자주 간다. 선영이는 주차를 세상에서 가장 귀찮아 하기 때문에, 아무데나 주차를 한다. 주차를 한 후에는 가려고 했던 상점으로 걸어 간다.

어느날, 선영이는 다리가 너무 아파서 병원에 갔다. 의사는 선영이에게 되도록 조금 걷거나, 쇼핑을 하지 말라고 했다. 선영이는 쇼핑을 버릴 수 없다. 그녀의 특기를 발휘해서 가장 좋은 주차 자리를 찾으려고 한다.

긴 도로는 일직선이다. 또, 모든 상점의 위치는 정수 좌표를 가지고 있다. 주차장은 모든 정수 좌표마다 하나씩 있으며, 선영이를 위해 항상 비어있다. 선영이는 주차비를 아끼기 위해서 쇼핑을 마치기 전 까지는 주차한 차를 이동시키지 않을 것이다. 선영이는 힘이 매우 세기 때문에, 자신이 쇼핑한 물건을 모두 들지 못하는 경우는 없다. 가려고 계획한 상점은 모두 방문해야 한다.


풀이


모든 수를 배열에 받아 정렬한다.

이렇게 되면 직선으로 움직이기 때문에 동선이 가장 짧아진다. 

선영이가 주차를 array[0]에 했다고 가정했을 때, 움직인 거리는 배열과 배열 사이의 간격이다.

이를 모두 더한 후, 마지막 값에서 시작점까지 오는 거리를 더해주면 된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Arrays;
import java.util.Scanner;
 
/**
 * Created by homr on 2017. 6. 30..
 */
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
 
        while(T!=0){
            int num = sc.nextInt();
            int[] arr = new int[num];
            int result = 0;
 
            for(int i =0; i<num; i++){
                arr[i] = sc.nextInt();
            }
 
            Arrays.sort(arr);
 
            for(int i =0; i<num-1; i++){
                result += arr[i+1- arr[i];
            }
            result += arr[num-1]-arr[0];
 
            System.out.println(result);
 
            T--;
        }
    }
}
 
cs


반응형

댓글