알고리즘 기초 1/2. 301 - 수학 1(연습)
17987번. 숨바꼭질 6
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
// 유클리드 호제법으로 최대공약수 구하기
function getGCD(a, b){
if(b === 0){
return a;
}
return getGCD(b, a % b);
};
const [N, S] = input[0].trim().split(" ").map((item) => Number(item));
const children = input[1].trim().split(" ").map((item) => Number(item));
// 수빈이와 동생들 사이의 거리값을 배열로 만든다.
let Ds = [];
children.forEach((item) => {
// 수빈이 위치와 동생 위치 중 어느 것이 더 큰지 모르므로
// 절댓값으로 만들어준다.
Ds.push(Math.abs(item - S));
});
// 유클리드 호제법을 적용하기 위해 내림차순 정렬을 한다.
Ds.sort((a, b) => b - a);
let ans = Ds[0];
// 여러 개의 숫자의 최대공약수를 구하는 방법
// 4개의 숫자가 있다고 했을 때, 1,2번 숫자의 최대공약수와 3번 숫자의 최대공약수를 구하고
// 그 최대공약수와 4번 숫자의 최대공약수를 구하면
// 4개 숫자의 최대공약수를 구할 수 있다는 방법을 사용한 것.
Ds.forEach((item) => {
ans = getGCD(ans, item);
});
console.log(ans);
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [N, S] = input[0].trim().split(" ").map((item) => Number(item));
const children = input[1].trim().split(" ").map((item) => Number(item));
function getGCD(a,b){
while(a % b !== 0){
let r = a % b;
if(r !== 0){
a = b;
b = r;
}
}
return a;
};
// 수빈이와 동생들 사이의 거리
let Ds = [];
children.forEach((item) => {
Ds.push(Math.abs(item - S));
});
Ds.sort((a, b) => b - a);
let ans = Ds[0];
Ds.forEach((item) => {
ans = getGCD(ans, item);
})
console.log(ans);
유클리드 호제법 부분만 원래 쓰던 방법으로 바꿔줬을 뿐인데...