https://www.acmicpc.net/problem/17087
1. 아이디어
유클리드 호제법을 활용해 최대 공약수를 구하는 방법으로 해결할 수 있다. 동생들의 위치는 수빈이의 위치에서 D의 배수만큼 더하거나 뺀 값들이므로 수빈이의 위치에서 동생들의 위치를 뺀 값들의 최대 공약수를 구하면 된다.
2. 문제풀이
첫 번째 동생과 수빈이의 위치 차를 기준으로 다른 동생들과의 최대공약수를 반복해서 계산하며 갱신하는 방식으로 구현했다. 이때 음수가 나올 수 있어서 모든 차는 절댓값을 씌워서 계산했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int S = Integer.parseInt(st.nextToken());
int[] arr = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int min = Integer.MAX_VALUE;
int criteria = Math.abs(S - arr[0]);
for (int n : arr) {
min = Math.min(min, gcd(Math.abs(S - n), criteria));
}
System.out.println(min);
}
// 유클리드 호제법
private static int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 28113번 - 정보섬의 대중교통 [Java] (0) | 2025.01.22 |
---|---|
[백준] 16394번 - 홍익대학교 [Java] (0) | 2025.01.22 |
[백준] 17071번 - 숨바꼭질 5 [Java] (0) | 2025.01.22 |
[백준] 13913번 - 숨바꼭질 4 [Java] (0) | 2025.01.22 |
[백준] 13549번 - 숨바꼭질 3 [Java] (0) | 2025.01.22 |