본문 바로가기
PS/Baekjoon

[Baekjoon] 1476 - 날짜 계산

by 서현 SEOHYEON 2023. 6. 23.

📝 문제

 

 

🔑 풀이 과정

규칙을 찾아서 풀이하면 된다.

1년일 때, E = 1, S = 1, M = 1

...

15년일 때, E = 15, S = 15, M = 15

16년일 때, E = 1, S = 16, M = 16

...

18년일 때, E = 3, S = 18, M = 18

19년일 때, E = 4, S = 19, M = 19

20년일 때, E = 5, S = 20, M = 1

 

E, S, M의 각 최댓값(15, 28, 19)를 넘기면 다시 1부터 카운팅이 되는것을 볼 수 있다.

즉, 각 최댓값에 어떠한 수를 곱해준 뒤 현재의 E, S, M을 더하면 연도가 나온다.

 

이걸 거꾸로해서 연도에서 현재의 E, S, M을 빼준 뒤, 그것을 각 최댓값으로 나눴을 때 전부 0이 나오는(나누어 떨어지는) 연도를 구해주면 된다.

 

 

🔓 답안

import java.io.*;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {

        final int maxE = 15;
        final int maxS = 28;
        final int maxM = 19;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int E = Integer.parseInt(st.nextToken());
        int S = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int year = 1;
        for(year = 1; ; year++){
            if((((year - E) % maxE) == 0) && (((year - S) % maxS) == 0) && (((year - M) % maxM) == 0))
                break;
        }


        bw.write(year + "\n");
        bw.flush();
        bw.close();
    }

}

 

 

 

🖤 알고리즘 분류

- 수학

- 브루트포스 알고리즘

- 정수론

댓글