본문 바로가기

Java/백준

[JAVA] 백준 2485 가로수

2485번: 가로수 (acmicpc.net)

 

2485번: 가로수

첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3 ≤ N ≤ 100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가

www.acmicpc.net

 

풀이 과정 

 

- 같은 간격으로 가로수를 최소로 심기 위해서는 현재 주어진 가로수 간격의 최대 공약수 간격으로 가로수를 심어야 함

 1) 가로수들 사이의 간격을 구함

 2)거리를 일정하게 만들어야 하기 때문에 거리들의 최대 공약수를 구함

 3) (간격/최대공약수) -1 해준 뒤 모두 더함 

 

정답 

 

import java.util.Scanner;
import java.util.Arrays;

public class Main {
	//최대 공약수 
	public static int gcd(int a, int b)
	{
		if(b==0)
		{
			return a;
		}
		else
		{
			return gcd(b,a%b);
		}
	}
	
	
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        
        int num = sc.nextInt();
        int arr[] = new int[num];
        int gap[] = new int[num-1];
        int gcd  = 0; //간격의 최대공약수 
        int result = 0;
        
        for(int i=0; i<num; i++)
        {
            arr[i] = sc.nextInt();
        }
        
        Arrays.sort(arr);
        
        //간격 저장
        for(int i=0; i<arr.length-1; i++)
        {
        	gap[i] = arr[i+1]-arr[i];
        }
    	
        //간격의 최대 공약수 구하기 
        gcd = gap[0];
        for(int i=1; i<arr.length-1; i++)
        {
        	gcd = gcd(gcd,gap[i]);
        }
        
        //추가로 심어야 할 가로수들 개수 
        for(int i=0; i<arr.length-1; i++)
        {
        	result+=(gap[i]/gcd)-1;
        }
        
        System.out.println(result);
        
    }
}

 

 

'Java > 백준' 카테고리의 다른 글

[JAVA] 백준 1929 소수 구하기  (1) 2024.02.10
[JAVA] 백준 4134 다음 소수  (1) 2024.02.10
[JAVA] 백준 1735 분수합  (1) 2024.02.10
[JAVA] 백준 13241 최소공배수  (1) 2024.02.10
[JAVA] 백준 12789 도키도키 간식드리미  (1) 2024.02.10