정보
브루트포스 알고리즘. 모든 경우의 수를 탐색했다.
E 가 15이하, S가 28이하, 달이 19 이하인데, 나머지 연산을 각각 1을 더해줘서 해줬다.
즉 나머지연산을 16에서, 29에서, 20에서 해주어야 한다.
그리고 여기서 연도에 0이 없으므로 만약 나머지연산한 결과가 0이라면 1로 만들어주는 작업이 추가로 필요하다.
import java.util.*;
import java.io.*;
public class Main{
static boolean visited[];
static int arr[];
static int cnt=0;
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb=new StringBuilder();
StringTokenizer st;
int nowE=1;
int nowS=1;
int nowM=1;
st=new StringTokenizer(br.readLine());
int E=Integer.parseInt(st.nextToken());
int S=Integer.parseInt(st.nextToken());
int M=Integer.parseInt(st.nextToken());
int cnt=1;
while(!(E==nowE&&S==nowS&&M==nowM)) {
cnt++;
nowE++;
nowS++;
nowM++;
nowE%=16;
nowS%=29;
nowM%=20;
if(nowE==0) nowE=1;
if(nowS==0) nowS=1;
if(nowM==0) nowM=1;
}
System.out.println(cnt);
}
}
문제를 푼 후 다른사람의 풀이를 봤는데 나는 6줄로 처리한 것을 3줄로도 처리할 수 있었다. 나는 나머지 연산을 하고, 그 후에 if 문을 썼는데,
다른 사람은 if(nowE==17) nowE=1 과 같이 단 1개의 조건문으로 내 코드에서 2가지 역할을 한 번에 수행할 수 있었다.
시간복잡도 상으로 크게 차이는 안나나 불필요한 작업을 줄이는 것이 필요해보인다.
하루에 백준 1문제 이상 푸는 것을 목표로 하고 있다.
https://solved.ac/profile/anwlro0212