JongSeok_12 2020. 8. 19. 15:06

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

 

1476번: 날짜 계산

준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타��

www.acmicpc.net

지구를 나타내는 수를 E, 태양을 나타내는 수를 S, 달을 나타내는 수를 M이라고 했을 때, 이 세 수는 서로 다른 범위를 가진다. (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19)

우리가 알고있는 1년은 준규가 살고있는 나라에서는 1 1 1로 나타낼 수 있다. 1년이 지날 때마다, 세 수는 모두 1씩 증가한다. 만약, 어떤 수가 범위를 넘어가는 경우에는 1이 된다.

 

위와 같은 조건의 지구, 해, 달 을 나타내는 수가 주어질때 해당 수에 해당하는 최소의 년도를 구하는 것이다. 따라서 나머지 연산을 통해 년도에 해당하는 수 % 15 or 28 or 19 를 수행하게 된다면 만약 기준을 넘어가는 년도가 발생한다면 획득한 나머지를 통해 현재 몇년도를 나타내는지 알 수 있다.

풀이 :

#include <iostream>

using namespace std;

int main(){
	//freopen_s(new FILE*, "tes.text", "r", stdin);
	int sunT, moonT, earthT;
	int sun = 0; int moon = 0; int earth = 0;
	cin >> earthT >> sunT >> moonT;
	int cnt = 0;

	while (1){
		cnt++;
		if (cnt == 7980){
			int f = 1;
		}
		earth = cnt % 15;  sun = cnt % 28; moon = cnt % 19;
		if (earth == 0) earth = 15;
		if (sun == 0) sun = 28;
		if (moon == 0) moon = 19;

		if (earth == earthT && sun == sunT && moon == moonT){
			cout << cnt << endl;
			return 0;
		}
	}


}