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로 만들어 줘서 입력 값과 비교한다.
반응형