오늘의 목표
백준 단계별로 풀어보기 중 '수학 1' 마무리하기
카잉달력.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class 카잉달력_6064 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int test_case = Integer.parseInt(br.readLine());
//long start_ = System.currentTimeMillis();
for(int i=0; i < test_case; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int M = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
long bound = gcd(M, N);
int gap = M-N;
if(gap==0) {
if(x==y) {
bw.write(x+"\n");
}else bw.write(-1+"\n");
}else if(gap < 0){
gap *= -1;
boolean flag = true;
int X;
int show = x;
X = x;
while(X!=y) {
if(show > bound) {
bw.write(-1+"\n");
flag = false;
break;
}
X += M;
if(X>N) {
while(X>N) X -= N;
}
show += M;
}
if(flag) bw.write(show+"\n");
}else {
boolean flag = true;
int start_2=0;
if(x>y) start_2 = x%N;
else start_2 = x;
if(start_2==0) start_2 = N;
int show = x;
while(start_2!=y) {
if(show > bound) {
bw.write(-1+"\n");
flag = false;
break;
}
start_2 += M;
if(start_2>N) {
while(start_2>N) start_2 -= N;
}
show += M;
}
if(flag) bw.write(show+"\n");
}
}
/*
long end = System.currentTimeMillis();
bw.write("걸린시간 : "+((end-start_)/1000.0)/t);
*/
bw.flush();
br.close();
bw.close();
}
public static long gcd(int M, int N) {
long s;
int O;
s = M*N;
while(N!=0) {
O = M%N;
M=N;
N=O;
}
s /= M;
return s;
}
}
활동사진
오늘의 회고
#카잉달력만 3일간 풀려고 노력했는데, 결국 풀어서 너무 기분이 좋았다.