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 |