내가 생각했을때 문제에서 원하는부분
첫째 줄에 정수 N이 주어진다. (1 ≤ N ≤ 5)
첫째 줄에 N번째 피갤컵이 열리는 연도와 월을 공백을 두고 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader를 사용하여 사용자로부터 정수 N을 입력받는다.
startYear는 2024로, startMonth는 8로 초기화한다.
이는 첫 번째 피갤컵의 개최 시점이다.
monthsToAdd = (N - 1) * 7;
N번째 피갤컵은 첫 번째 피갤컵 이후 (N - 1)번의 7개월 주기가 지난 시점이다.
따라서 총 추가될 개월 수는 (N - 1)에 7을 곱한 값이다.
currentMonth = startMonth + monthsToAdd;
시작 월에 계산된 monthsToAdd를 더하여 현재까지의 총 월 수를 구한다.
finalYear = startYear + (currentMonth - 1) / 12;
총 월 수에서 1을 뺀 후 12로 나누면, 몇 년이 경과했는지 계산할 수 있다.
예를 들어, 12개월은 1년, 24개월은 2년이므로, (월 - 1)을 기준으로 연도를 계산한다.
finalMonth = (currentMonth - 1) % 12 + 1;
총 월 수에서 1을 뺀 후 12로 나눈 나머지에 1을 더하면, 현재 월을 1부터 12까지의 값으로 정확하게 표현할 수 있다.
예를 들어, 13개월이면 1월이 된다.
계산된 finalYear와 finalMonth를 공백으로 구분하여 출력한다.
코드로 구현
package baekjoon.baekjoon_29;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 33612번 문제
public class Main1067 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// N 값 입력 받기
int N = Integer.parseInt(br.readLine());
// 첫 번째 피갤컵의 시작 연도와 월
int startYear = 2024;
int startMonth = 8;
// N번째 피갤컵까지 추가될 총 개월 수 계산
// (N-1)번의 7개월 주기가 추가됩니다.
int monthsToAdd = (N - 1) * 7;
// 최종 월 계산 (시작 월 + 추가 개월 수)
int currentMonth = startMonth + monthsToAdd;
// 연도 계산
// (currentMonth - 1)을 하는 이유는 월이 1부터 시작하므로,
// 12월을 넘어가면 연도가 바뀌기 때문입니다.
// 예를 들어 13개월은 1년 1개월이므로 (13-1)/12 = 1년이 됩니다.
int finalYear = startYear + (currentMonth - 1) / 12;
// 최종 월 계산 (12로 나눈 나머지 + 1)
// (currentMonth - 1) % 12 + 1을 하는 이유는,
// 예를 들어 12개월은 0이 아닌 12로, 13개월은 1로 표시하기 위함입니다.
int finalMonth = (currentMonth - 1) % 12 + 1;
// 결과 출력
System.out.println(finalYear + " " + finalMonth);
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.