ALGORITHM

[JAVA] 백준 1476 - 날짜 계산

연듀 2022. 11. 13. 16:58

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

 

1476번: 날짜 계산

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

www.acmicpc.net

 

 

방법1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());

        // (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19)

        int E = Integer.parseInt(st.nextToken());
        int S = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

         if(E==15) E=0;
         if(S==28) S=0;
         if(M==19) M=0;

        int year=1;
        while(true){
            if(year % 15 == E && year % 28 == S && year % 19 ==M){
                System.out.println(year);
                break;
            }
            year++;
        }
    }
}

 

 

E,S,M이 각각 최댓값이면 0으로 초기화 시켜줘야한다.

처음에 저부분을 빼먹어서 시간초과가 났다.

예를 들어 S가 28일 경우 year % 28 은 28이 아니라 0이 되기 때문이다.  

 

 

 

방법2

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());

        // (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19)

        int E = Integer.parseInt(st.nextToken());
        int S = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

         int e = 1;
         int s = 1;
         int m = 1;

        int year=1;
        while(true){
            if(e == E && s == S && m == M) {
                System.out.println(year);
                break;
            }

            year++;
            e++;
            s++;
            m++;

            if(e == 16) e = 1;
            if(s == 29) s = 1;
            if(m == 20) m = 1;
        }
    }
}

 

직관적으로 e,s,m을 1씩 증가시키며 각각의 최댓값을 넘어갈 때 1로 만들어 줘서 입력 값과 비교한다. 

 

 

 

'ALGORITHM' 카테고리의 다른 글

[JAVA] 백준 6064 - 카잉 달력  (0) 2022.11.16
[JAVA] 백준 1748 - 수 이어 쓰기 1  (0) 2022.11.13
[JAVA] 백준 2309 - 일곱 난쟁이  (0) 2022.11.13
[JAVA] 백준 13398번- 연속합 2  (0) 2022.11.11
[JAVA] 백준 17404번- RGB거리2  (0) 2022.11.09