반응형
문제
풀이
package Implementation;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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()," ");
int e = Integer.parseInt(st.nextToken());//지구
int s = Integer.parseInt(st.nextToken());//태양
int m = Integer.parseInt(st.nextToken());//달
int i = 1, j = 1, k = 1;
int year = 1;//연도
while(true) {
if(i == e && j == s && m == k) {
break;
}
i++;
j++;
k++;
year++;
if(i > 15) i = 1;
if(j > 28) j = 1;
if(k > 19) k = 1;
}
System.out.println(year);
br.close();
}
}
팁
1. 부르트포스(brute force) 알고리즘
- 해당 문제는 부르트 포스 알고리즘을 활용하여 풀 수 있다.
- brute: 무식한, force: 힘 무식한 힘으로 해석할 수 있다.
- 완전탐색 알고리즘. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다.
- 선형 구조를 전체적으로 탐색하는 순차 탐색, 비선형 구조를 전체적으로 탐색하는 깊이 우선 탐색(DFS, Depth First Search)과 너비 우선 탐색(BFS, breadth first search)이 가장 기본적인 도구이다.
2. 풀이 방법
- e, s, m을 입력받는다.
- 반복문을 실행하면서 값을 비교할 i, j, k와 연도를 구할 year를 1로 선언해준다.
( 1 1 1의 경우 1년이므로)
int i = 1, j = 1, k = 1 int year = 1;//연도
- while문을 통해 i, j, k가 e, s, m과 동일해질 때까지 반복문을 실행한다.
- i, j, k, year을 1씩 증가시키고 범위를 넘어가면 1로 변경해준다.
while(true) { if(i == e && j == s && m == k) { break; } i++; j++; k++; year++; if(i > 15) i = 1; if(j > 28) j = 1; if(k > 19) k = 1; }
출처
반응형
'알고리즘 > Java' 카테고리의 다른 글
[백준] 5585.거스름돈(Java8) (0) | 2021.10.17 |
---|---|
[백준] 10773.제로(Java8) (0) | 2021.10.16 |
[백준] 7568.덩치(Java8) (0) | 2021.10.12 |
[백준] 1009.분산처리(Java8) (0) | 2021.10.11 |
[백준] 18406.럭키 스트레이트(Java8) (0) | 2021.10.10 |