문제 설명
준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다.
준규가 사는 나라에서는 수 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이기 때문에, 정답이 음수가 나오는 경우는 없다.
👇 접근방식 (내 생각정리)
처음에는 이게 무슨 문젠가 싶었습니다..
문제설명을 보고선 금방 이해됐는데, 입력 데이터를 넣은 걸 가지고 출력 값을 확인하니깐 어떤 프로그램을 만들어한다는 거지? 라는 생각에 계속 고민 했습니다. 그래도 계속 써가면서 생각해보니 어떤 프로그램을 만들라는 문제인지 이해했습니다.
이해한 문제를 설명을 해드리겠습니다.
1년 | 1 | 1 | 1 |
2년 | 2 | 2 | 2 |
.. | .. | .. | |
15년 | 15 | 15 | 15 |
16년 | 1 | 16 | 16 |
.. | .. | .. | |
18년 | 3 | 18 | 18 |
19년 | 4 | 19 | 19 |
20년 | 5 | 20 | 1 |
.. | .. | .. |
테이블 표를 보게되면, 왼쪽에는 우리가 알고 있는 연도입니다. 오른쪽 세 칸은 준규가 사는 나라가 연도를 세는 방식이구요.
계속 카운트를 해주면서 준규가 사는 연도가 예제 입,출력 3을보면 1, 2 3이 우리가 알고있는 연도는 몇 년일지 구하는 문제입니다.
출력에서 설명한, 가장 빠른 연도를 출력하라는 말과 정답이 음수가 나오는 경우는 없다라는 말을 이제 이해했습니다.
이 문제는 반복문을 통해 하나씩 카운트를 해주면서 1, 2, 3이 될 때를 찾는 문제를 만들 것입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int E, S, M; // 입력 값
static int eTemp, sTemp, mTemp; // 카운트 될 temp 변수
static final int eRange = 15;
static final int sRange = 28;
static final int mRange = 19;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
E = Integer.parseInt(st.nextToken());
S = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
int cnt = 0;
eTemp = sTemp = mTemp = 0;
while(true) {
if (eTemp == eRange) eTemp = 0;
eTemp++;
if (sTemp == sRange) sTemp = 0;
sTemp++;
if (mTemp == mRange) mTemp = 0;
mTemp++;
cnt++;
if (eTemp == E && sTemp == S && mTemp == M) break;
}
System.out.println(cnt);
}
}
'PS > 백준' 카테고리의 다른 글
[백준 *Java] - 테트로미노 (14500) (0) | 2022.03.31 |
---|---|
[백준 *Java] - 리모컨 (1107) (0) | 2022.03.31 |
[백준 *Java] - 사탕게임 (3085) (0) | 2022.03.30 |
[백준 *Java] - 일곱 난쟁이 (2309) (0) | 2022.03.29 |
[백준 *Java] - RGB거리2 (17404) (0) | 2022.03.29 |