1476. 날짜 계산 (S5)
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
2 초 | 4 MB | 43801 | 28088 | 22868 | 66.636 % |
문제
준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다.
지구를 나타내는 수를 E, 태양을 나타내는 수를 S, 달을 나타내는 수를 M이라고 했을 때, 이 세 수는 서로 다른 범위를 가진다. (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19)
우리가 알고있는 1년은 준규가 살고있는 나라에서는 1 1 1로 나타낼 수 있다. 1년이 지날 때마다, 세 수는 모두 1씩 증가한다. 만약, 어떤 수가 범위를 넘어가는 경우에는 1이 된다.
예를 들어, 15년은 15 15 15로 나타낼 수 있다. 하지만, 1년이 지나서 16년이 되면 16 16 16이 아니라 1 16 16이 된다. 이유는 1 ≤ E ≤ 15 라서 범위를 넘어가기 때문이다.
E, S, M이 주어졌고, 1년이 준규가 사는 나라에서 1 1 1일때, 준규가 사는 나라에서 E S M이 우리가 알고 있는 연도로 몇 년인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 세 수 E, S, M이 주어진다. 문제에 나와있는 범위를 지키는 입력만 주어진다.
출력
첫째 줄에 E S M으로 표시되는 가장 빠른 연도를 출력한다. 1 1 1은 항상 1이기 때문에, 정답이 음수가 나오는 경우는 없다.
summary
E S M이 우리가 알고 있는 연도로 몇 년인지 구하기
- 가장 빠른 연도를 출력
strategy
완전탐색 (브루트포스)
- 가장 빠른 년도를 구하기 때문에 1부터 시작
- E(15), S(28), M(19) 로 나눈 나머지 활용. (대신, 15, 28, 19 는 나머지 0과 같은 경우로 따로 작성필요)
- 각 정수가 세개의 조건을 모두 만족하면 정답
note
- 1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19
import java.util.*;
import java.io.*;
public class Main {
static int E,S,M;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer input = new StringTokenizer(br.readLine());
E = Integer.parseInt(input.nextToken());
S = Integer.parseInt(input.nextToken());
M = Integer.parseInt(input.nextToken());
E = (E == 15) ? 0 : E;
S = (S == 28) ? 0 : S;
M = (M == 19) ? 0 : M;
int i = 1;
while(true) {
if((i % 15 == E) && (i % 28 == S) && (i % 19 == M)) break;
i++;
}
System.out.println(i);
}
}
문제 | 결과 | 메모리 | 시간 | 언어코드 | 길이 |
1476 | 맞았습니다!! | 14156 KB | 100 ms | Java 11 / 수정 | 724 B |
memo
- 모든 문제를 풀때는 브루투포스를 가장 먼저 떠올리는 자세를 가져야겠다. (자꾸 알고리즘 기법을 떠올리니 쉬운 길이 낯설다)
- 정수론 문제도 풀면서 수학적 사고도 길러야겠다. (현대오토에버 코테 후기)
'문제 풀이 > 백준' 카테고리의 다른 글
[JAVA71] 1269. 대칭 차집합 (2) | 2024.11.04 |
---|---|
[JAVA70] 1439. 뒤집기 (0) | 2024.11.04 |
[JAVA68] 2343. 기타 레슨 (0) | 2024.11.01 |
[JAVA67] 1699. 제곱수의 합 (1) | 2024.10.31 |
[JAVA66] 16234. 인구이동 (0) | 2024.10.29 |