백준 나는 너가 살아온 날을 알고 있다

KIMYEONGJUN·2024년 10월 19일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

입력은 한 줄의 날짜로 이루어진다.
각 날짜는 일, 월, 년이 공백을 두고 주어지며,
일과 월은 항상 유효하며,
연도는 항상 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();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글