Calculate Date(by Modular)

๋‚˜์˜ ๋ฌธ์ œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•

ex) E = 1, S = 2, M = 3 ๋™์ผํ•œ n์— ๋Œ€ํ•ด ๋‹ค์Œ์˜ 3๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” n์ด ์ •๋‹ต์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. 15*n + 1 == E && 28*n + 2 == S && 19*n == M ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์œ„๋ฅผ ๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•ด์„œ E, S, M์„ ๊ฐ๊ฐ 15, 28, 19๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ n์ด๋ผ๊ณ  ํ•˜๋ฉด n์€ 0๋ถ€ํ„ฐ ๊ณ„์†ํ•ด์„œ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ณ , n%15 == E && n%28 == S && n%19 == M 3๊ฐ€์ง€๋ฅผ ๋™์‹œ์— ๋งŒ์กฑํ•˜๋Š” n์„ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๊ฒƒ๋งˆ์ €๋„ ์˜ค๋ฅ˜๊ฐ€ ์ข€ ์žˆ๋‹ค. 1. ๋Œ€ํ‘œ์ ์œผ๋กœ E๋ฅผ ๋“ค๋ฉด n = 15/30/45/...15์˜ ๋ฐฐ์ˆ˜์ผ ๋•Œ ๋‚˜๋จธ์ง€๋Š” 0์ด ๋˜๋Š”๋ฐ, n=15๋ผ๋ฉด ์ด๊ฒƒ์€ 15๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋จธ์ง€๋งˆ 0์ด ๋˜๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•˜๊ฒŒ ์กฐ์ž‘ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (S์™€ M๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. n์ด 28์˜ ๋ฐฐ์ˆ˜์ด๊ฑฐ๋‚˜ n์ด 19์˜ ๋ฐฐ์ˆ˜์ผ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋˜๋ฉด ์•ˆ ๋˜๊ณ  28, 19๋กœ ๋‚จ์•„์žˆ์–ด์•ผ ํ•œ๋‹ค.)

์–ด๋–ป๊ฒŒ ์กฐ์ž‘ํ•  ๊ฒƒ์ธ๊ฐ€?

E) n = 15, n%15 = 15๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด, n-1์„ ํ•ด์ฃผ๊ณ  ๋‚˜์˜ค๋Š” ๋‚˜๋จธ์ง€ 14์— ๋Œ€ํ•ด +1์„ ํ•ด์ค€๋‹ค. => n = 17, (n-1)%15 = 16%15 = 1 + 1 = 2(์ •๋‹ต) S์™€ M๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

์ด์ œ n์„ 0๋ถ€ํ„ฐ 1์”ฉ ๊ณ„์†ํ•ด์„œ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ n%15==E-1 && n%28==S-1 && n%19==M-1 ๋ฅผ ๋งŒ์กฑํ•˜๋Š” n์„ ์ฐพ์•„์„œ n+1์ด ์ •๋‹ต์ด ๋œ๋‹ค.

2. n์ด 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ด์œ 

์ž…๋ ฅ๋ฐ›๋Š” ์ˆ˜ E,S,M์—์„œ -1์”ฉ ํ•ด์ฃผ๊ณ , n์„ 15,28,19๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ๋‚˜๋จธ์ง€ +1์ด ์ •๋‹ต์ด ๋œ๋‹ค. E, S, M์ด ์ˆซ์ž ๊ทธ ์ž์ฒด๋กœ 1,1,1 ์ด๊ณ  i๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉด ์ •๋‹ต์ด ๋˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— E-1,S-1,M-1์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธใ…‡์— i๋„ 1์ด ์•„๋‹Œ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ ๊ตฌํ˜„

import java.util.*;
public class CalculateDateESM_Modular_2nd {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int E = sc.nextInt()-1;
		int S = sc.nextInt()-1;
		int M = sc.nextInt()-1;
		for(int i=0;;i++) {//i๊ฐ€ 1์ด ์•„๋‹ˆ๋ผ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ด์œ  ์ดํ•ดํ•˜๊ธฐ.
			if(i%15 == E && i%28 == S && i%19 == M) {//๋™์ผํ•œ i์— ๋Œ€ํ•ด 3๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด 
				System.out.println(i+1);
				break;
			}
		}
		
	}

}

Last updated