코딩테스트/BOJ

[BOJ] 1476 날짜 계산 - JAVA

5월._. 2022. 7. 8.
728x90

1. 문제

 

1476번: 날짜 계산

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

www.acmicpc.net

준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다.
지구를 나타내는 수를 E, 태양을 나타내는 수를 S, 달을 나타내는 수를 M이라고 했을 때, 이 세 수는 서로 다른 범위를 가진다. (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19)
우리가 알고있는 1년은 준규가 살고있는 나라에서는 1 1 1로 나타낼 수 있다. 1년이 지날 때마다, 세 수는 모두 1씩 증가한다. 만약, 어떤 수가 범위를 넘어가는 경우에는 1이 된다.
예를 들어, 15년은 15 15 15로 나타낼 수 있다. 하지만, 1년이 지나서 16년이 되면 16 16 16이 아니라 1 16 16이 된다. 이유는 1 ≤ E ≤ 15 라서 범위를 넘어가기 때문이다.
E, S, M이 주어졌고, 1년이 준규가 사는 나라에서 1 1 1일때, 준규가 사는 나라에서 E S M이 우리가 알고 있는 연도로 몇 년인지 구하는 프로그램을 작성하시오.


2. 풀이

1.  E,S,M을 입력받을 때 전부 1을 빼준 뒤 저장한다.

2.  e,s,m은 체크하기 위한 변수다. 1년부터 하나씩 올려가면서 e==E && s==S && m==M인 경우일 때 년도를 출력하고 멈춘다.

3.  break 조건에 걸리지 않았다면 e,s,m을 모두 +1씩 한다. 범위를 넘어가는 경우 1로 만들어야 하기 때문에 나머지 연산을 한다. 이 나머지 연산 때문에 E,S,M에서 1을 뺐고, e,s,m이 0부터 시작한다.

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

public class BOJ_1476_날짜계산 {
   public static void main(String[] args) throws IOException {
      StringTokenizer st = new StringTokenizer(new BufferedReader(new InputStreamReader(System.in)).readLine());
      int E = Integer.parseInt(st.nextToken())-1;
      int S = Integer.parseInt(st.nextToken())-1;
      int M = Integer.parseInt(st.nextToken())-1;

      int e=0,s=0,m=0;
      for(int i=1;;i++){
         if(e==E && s==S && m==M){
            System.out.println(i);
            break;
         }
         e = (e+1)%15;
         s = (s+1)%28;
         m = (m+1)%19;
      }
   }
}

3. 결과

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 2512 예산 - JAVA  (0) 2022.07.10
[BOJ] 9375 패션왕 신해빈 - JAVA  (0) 2022.07.09
[BOJ] 10610 30 - JAVA  (0) 2022.07.07
[BOJ] 1789 수들의 합 - JAVA  (0) 2022.07.06
[BOJ] 2869 달팽이는 올라가고 싶다 - JAVA  (0) 2022.07.05

댓글