Contents
https://www.acmicpc.net/problem/1476
연도를 이상하게 세는 문제다
1년이 지날 때마다 지구숫자 e, 태양 숫자 s, 달 숫자 m이 하나씩 오른다.
(0<e<16,0< s<29, 0<m< 20)
만약 우리 연도로 15년이라면 15 15 15고
16년이라면 1 16 16이 된다.
저쪽 나라 연도로 입력했을 때 우리 연도로는 몇년인지 출력해라.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 백준 날짜 계산
// 우리와 다른 방식으로 연도를 계산하는 나라가 있다.
// 각각 지구(e), 태양(s), 달(m)을 상징하는 수 3개를 이용해 나타낸다.
// (1 <= e <= 15, 1 <= s <= 28, 1 <= m <= 19)
// 1년이 지날 때마다 각 숫자가 1씩 증가한다.
// 15년까진 15 15 15지만 16년부턴 1 16 16
// 세 숫자를 입력했을 때 우리가 알고있는 연도 출력
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());
// 15년까지
int e = Integer.parseInt(st.nextToken());
// 28년까지
int s = Integer.parseInt(st.nextToken());
// 19년까지
int m = Integer.parseInt(st.nextToken());
int year = 0;
int tmpe = 0;
int tmps = 0;
int tmpm = 0;
// 찾을 때까지 무한루프
while (true) {
tmpe++;
tmps++;
tmpm++;
year++;
if (tmpe == 16) {
tmpe = 1;
}
if (tmps == 29) {
tmps = 1;
}
if (tmpm == 20) {
tmpm = 1;
}
if (tmpe == e && tmps == s && tmpm == m) {
System.out.println(year);
break;
}
}
}
}
수학을 이용하는 문제다.
근데 어떻게 푸는지 감이 안잡혀서 일단 무한루프를 넣고 세 숫자 모두 만족할 때까지 돌려보았다.
근데 맞았다;;
다른 사람들이 푸는 걸 찾아봤는데 대부분 이렇게 풀고
다른 경우는 나머지를 이용해서 풀었더라.
if (year % 15 == 0 && year % 28 == 0 && year % 19 == 0) {
System.out.println(year);
break;
}
이게 더 깔끔하고 수학스러운 거 같다.
'백준' 카테고리의 다른 글
[백준] 배열 합치기 (JAVA) (2) | 2025.02.05 |
---|---|
[백준] 비밀번호 찾기 (JAVA) (2) | 2025.02.05 |
[백준] 문자열 집합 (JAVA) (0) | 2025.02.03 |
[백준] 이친수 (JAVA) (3) | 2025.02.03 |
[백준] 방 번호 (JAVA) (1) | 2025.02.01 |