1. 문제
준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 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 |
댓글