백준
백준[2485]번 : 가로수 ( JAVA )
하루우울루
2023. 3. 17. 11:46
https://www.acmicpc.net/problem/2485
2485번: 가로수
첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3 ≤ N ≤ 100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가
www.acmicpc.net
개발환경은 eclipse를 사용했습니다.
Code
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 심어져 있는 가로수의 개수
int[] arr = new int[n];
for(int i=0;i<n;i++){ // 가로수 위치 입력받음
arr[i] = sc.nextInt();
}
int[] NewArr = new int[n-1];
int N = n;
for(int i=n-2;i>=0;i--){ // 가로수들의 위치의 차를 저장
NewArr[i] = arr[N-1] - arr[N-2];
N--;
}
int ans = 0;
for(int i=0;i<n-2;i++){ // 유클리드 호제법 사용
int result = eucd(NewArr[i+1],NewArr[i]); // 최대공약수
ans = result;
NewArr[i+1] = ans;
}
int count = 1;
for(int i=arr[0];i<arr[arr.length-1];){ // 전체 심는 개수
i+=ans;
count++;
}
int answer = count - arr.length; // 전체에서 심어져 있는 개수를 빼준다
System.out.println(answer);
sc.close();
}
static int eucd(int bn, int sn) // 유클리드 호제법 사용
{
int r = bn % sn;
if (r == 0) {
return sn;
} else {
return eucd(sn, r);
}
}
}
이전 문제들에서 계속 사용되었던 유클리드 호제법을 사용해서 풀었다.
코드의 주석을 보면 쉽게 이해할 수 있을 것이다.