
내가 생각했을때 문제에서 원하는부분
입력은 한 줄의 날짜로 이루어진다.
각 날짜는 일, 월, 년이 공백을 두고 주어지며,
일과 월은 항상 유효하며,
연도는 항상 1700과 2200사이의 값으로만 주어진다.
0 0 0이 입력되면 프로그램을 종료한다.
각 줄에 날짜에 해당하는 날의 수를 출력한다.
내가 이 문제를 보고 생각해본 부분
xxxx년 1월 1일 ~ xxxx년 yy월 zz일의 총 일 수를 구하는 문제이다.
고려해야하는 사항은 윤년이다.
윤년은 4로 나누어 떨어지며 100으로 나누어 떨어지면 안되지만
400으로 나누어떨어지면 괜찮다.
윤년일 경우 3월이 넘는 달을 입력하면 +1을 해준다.
month의 경우 12개의 배열을 만들어 yy달이 될때까지 배열의 값을 총 일수에 더해준다.
코드로 구현
package baekjoon.baekjoon_23;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 2139번 문제
public class Main811 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 각 달의 일수 배열 (1월부터 12월까지)
int[] mArr = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
while (true) {
String input = br.readLine();
String[] parts = input.split(" "); // 입력을 공백으로 나누기
int day = Integer.parseInt(parts[0]);
int month = Integer.parseInt(parts[1]);
int year = Integer.parseInt(parts[2]);
// 종료 조건
if(day == 0 && month == 0 && year == 0) {
break;
}
int totalDay = 0;
boolean isLeapYear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
// 윤년인 경우 2월 이후에 하루 추가
if(isLeapYear && month > 2) {
totalDay++;
}
// 월별 일수를 합산
for(int i = 0; i < month; i++) {
totalDay += mArr[i];
}
// 해당 월의 일수 추가
totalDay += day;
// 결과 출력
System.out.println(totalDay);
}
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.