[백준 | Javascript] 17087

박기영·2022년 9월 9일
0

백준

목록 보기
115/127

알고리즘 기초 1/2. 301 - 수학 1(연습)
17987번. 숨바꼭질 6

문제

17987번 문제 링크

solution

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);

유클리드 호제법 부분만 원래 쓰던 방법으로 바꿔줬을 뿐인데...

참고 자료

참고 자료 1
참고 자료 2

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글