Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
관리 메뉴

으하하 공부일기

[SWEA] - 7532. 세영이의 SEM력 연도 (D3) 본문

SWEA/D3

[SWEA] - 7532. 세영이의 SEM력 연도 (D3)

0으하하0 2022. 5. 16. 23:11

[문제]

세영이는 태양(S)과 지구(E)와 달(M)을 이용하여 연도를 기억한다.
이를 이용한 방법을 SEM력이라고 부르며, SEM력은 자연수 3개, S, E, M으로 이루어져있다.
첫 번째 수는 태양, 두 번째는 지구, 세 번째는 달과 관련 있다.
AD 1년에 SEM력을 1 1 1로 정의했다.
1년이 지날 때마다 각 수를 1씩 증가시키는데,
S는 365보다 커지면 1로, E는 24보다 커지면 1로, M은 29보다 커지면 1로 돌아온다.
예를 들어서 AD 24년은 24 24 24이고 AD 25년은 25 1 25이다.
SEM력으로 이루어진 연도가 주어졌을 때, 이를 만족하는 실제 연도 중 가능한 가장 빠른 연도를 구하여라.

[입력]
첫 번째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 2000)가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 SEM력으로 이루어진 연도를 의미하는 자연수 3개,
S, E, M(1 ≤ S ≤ 365, 1 ≤ E ≤ 24, 1 ≤ M ≤ 29)가 공백으로 구분되어 주어진다.

[출력]
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
주어진 SEM력 연도를 만족하는 실제 연도 중, 가능한 가장 빠른 연도를 출력하라.

문제 풀기

7532. 세영이의 SEM력 연도

[풀이]

  • AD연도는 각각 S : AD%365, E : AD%24, M : AD%29이다.
  • 따라서 AD연도에서 S, E, M을 뺀 값을 365, 24, 29로 나눴을 때 나머지가 0이어야 한다.
import java.util.Scanner;

class Solution {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		
		int t = sc.nextInt();
		
		for(int tc=1; tc<=t; tc++) {
			int s = sc.nextInt();
			int e = sc.nextInt();
			int m = sc.nextInt();
			
			int year = s;
			
			while(true) {
				if((year - e) % 24 == 0 && (year - m) % 29 == 0) break;
				year += 365;
			}
			
			System.out.format("#%d %d\n", tc, year);
		}
	}
}