https://www.acmicpc.net/problem/1476
방법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 |