티스토리 뷰

https://www.acmicpc.net/problem/6064

 

6064번: 카잉 달력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.

www.acmicpc.net

const fs = require('fs');
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n").map(v=>v.split(' ').map(Number));
const T = input.splice(1);
const answer = [];

T.forEach(v=>{
  const [M,N,X,Y] = v;
  const last = lcm(N,M);  // 최소공배수에 멸망. 
  let x = X;
  let y = Y; 
  while(true){
    if(x>last || y>last){  // 멸망
      answer.push(-1)
      break;
    }else if(x>y){ //  // x가 더 크면 y를 더해줌. 
      y+=N 
    }else if(x<y){ //  y가 더 크면 x를 더해줌
      x+=M
    }else{         // x랑 y 가 같다면 그게 정답. 
      answer.push(x)  
      break;
    }
  }
})

//출력
console.log(answer.join('\n'))


//최대 공약수 구하기.
function gcd(a,b){
  if(b==0) return a;
  return a>b ? gcd(b,a%b) : gcd(a,b%a);
}

//최대 공배수 구하기
function lcm(a,b){
  return (a*b)/gcd(a,b);
}
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함