문제
최근에 ICPC 탐사대는 남아메리카의 잉카 제국이 놀라운 문명을 지닌 카잉 제국을 토대로 하여 세워졌다는 사실을 발견했다. 카잉 제국의 백성들은 특이한 달력을 사용한 것으로 알려져 있다. 그들은 M과 N보다 작거나 같은 두 개의 자연수 x, y를 가지고 각 년도를 와 같은 형식으로 표현하였다. 그들은 이 세상의 시초에 해당하는 첫 번째 해를 <1:1>로 표현하고, 두 번째 해를 <2:2>로 표현하였다. 의 다음 해를 표현한 것을 이라고 하자. 만일 x < M 이면 x' = x + 1이고, 그렇지 않으면 x' = 1이다. 같은 방식으로 만일 y < N이면 y' = y + 1이고, 그렇지 않으면 y' = 1이다. 은 그들 달력의 마지막 해로서, 이 해에 세상의 종말이 도래한다는 예언이 전해 온다.
예를 들어, M = 10 이고 N = 12라고 하자. 첫 번째 해는 <1:1>로 표현되고, 11번째 해는 <1:11>로 표현된다. <3:1>은 13번째 해를 나타내고, <10:12>는 마지막인 60번째 해를 나타낸다.
네 개의 정수 M, N, x와 y가 주어질 때, 이 카잉 달력의 마지막 해라고 하면 는 몇 번째 해를 나타내는지 구하는 프로그램을 작성하라.
입력
입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다. 각 줄에는 네 개의 정수 M, N, x와 y가 주어진다. (1 ≤ M, N ≤ 40,000, 1 ≤ x ≤ M, 1 ≤ y ≤ N) 여기서 은 카잉 달력의 마지막 해를 나타낸다.
출력
출력은 표준 출력을 사용한다. 각 테스트 데이터에 대해, 정수 k를 한 줄에 출력한다. 여기서 k는 가 k번째 해를 나타내는 것을 의미한다. 만일 에 의해 표현되는 해가 없다면, 즉, 가 유효하지 않은 표현이면, -1을 출력한다.
브루트포스 문제.
ex M=5, N=7
1: <1,1> 6: <1,6> 11<1,4> 16<1,2> 21<1,7> 26<1,5> 31<1,3>
2: <2,2> 7: <2,7> 12<2,5> 17<2,3> 22<2,1> 27<2,6> 32<2,4>
3: <3,3> 8: <3,1> 13<3,6> 18<3,4> 23<3,2> 28<3,7> 33<3,5>
4: <4,4> 9: <4,2> 14<4,7> 19<4,5> 24<4,3> 29<4,1> 34<4,6>
5: <5,5> 10:<5,3> 15<5,1> 20<5,6> 25<5,4> 30<5,2> 35<5,7>
규칙을 찾아보면 x가 M만큼 증가할 때 마다 x의 값은 동일하고 y의 값만 변한다.
마찬가지로, y가 N만큼 증가할때 y의 값은 동일하고 x의 값만 변한다.
나머지연산(%)을 이용해 답을 구할 수 있다.
예를들어, 찾는 숫자가 <4,5> == 19라면
(19%5) = 4 , (19%7) == 5를 도출해낼 수 있다.
단, 나머지값이 0이 나오는 것을 방지하기 위해 모든 x와 y의 값에서 1을 빼준다
m씩 증가시키면서
(i%N) == y 가 나오는 값을 구하고, +1을 해주면 된다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int s = 0; s < T; s++) {
boolean check = false;
int m = sc.nextInt();
int n = sc.nextInt();
int x = sc.nextInt() - 1;
int y = sc.nextInt() - 1;
for (int i = x; i < (n * m); i += m) {
if (i % n == y) {
System.out.println(i + 1);
check = true;
break;
}
}
if (!check) {
System.out.println(-1);
}
}
}
}
'Algorithm by java' 카테고리의 다른 글
백준 1748번 수 이어쓰기 1 java (0) | 2019.10.17 |
---|---|
백준 3085번 사탕 게임 java (0) | 2019.10.16 |
백준 1107번 리모컨 java (0) | 2019.09.27 |
백준 2309번 일곱 난쟁이 java (0) | 2019.09.24 |
백준 1021번 회전하는 큐 java (0) | 2019.09.21 |