CodingTest/Baekjoon

[baekjoon] 백준 1308번(자바): D-Day

JunJangE 2022. 8. 15. 00:26

문제

 

1308번: D-Day

첫째 줄에 오늘의 날짜가 주어지고, 두 번째 줄에 D-Day인 날의 날짜가 주어진다. 날짜는 연도, 월, 일순으로 주어지며, 공백으로 구분한다. 입력 범위는 1년 1월 1일부터 9999년 12월 31일 까지 이다.

www.acmicpc.net

알고리즘

- 반복문을 통해 D-Day를 카운트한다.

- 매 순간 현재 날짜, 현재 월, 년도를 확인하고 카운트한다.

- 확인하는 과정으로는 현재 월의 마지막 날짜인지, 마지막 달의 마지막 날짜인지, 윤년과 평년인지 확인한다.

- 현재 날짜와 마지막 날짜가 같다면 D-Day를 출력하고 반복문을 멈춘다.

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;

public class Main {
    
    public static Boolean isDay(int year){
        return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;

    }


    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 현재 날짜 입력 받음.
        String[] current = br.readLine().split(" ");
        int currentYear = Integer.parseInt(current[0]);
        int currentMouth = Integer.parseInt(current[1]);
        int currentDay = Integer.parseInt(current[2]);

        // 마지막 날짜 입력 받음.
        String[] last = br.readLine().split(" ");
        int lastYear = Integer.parseInt(last[0]);
        int lastMonth = Integer.parseInt(last[1]);
        int lastDay = Integer.parseInt(last[2]);

        int dDay = 0;

        // 날짜가 오버 되었다면 "gg" 출력
        if(currentYear+1000 < lastYear || currentYear+1000 == lastYear && currentMouth<lastMonth
                ||currentYear+1000==lastYear && currentMouth==lastMonth && currentDay<=lastDay){
            System.out.println("gg");



            // 아니라면
        } else {

            // 반복문을 통해 D-Day 카운트
            while(true){
                currentDay++;
                dDay++;

                if(currentDay > 31 && (currentMouth == 1 || currentMouth == 3 || currentMouth == 5 || currentMouth ==7||
                        currentMouth == 8 || currentMouth == 10 || currentMouth == 12 )){
                    currentMouth++;
                    currentDay = 1;
                }else if( currentDay > 30 && (currentMouth == 4 || currentMouth == 6 || currentMouth == 9 ||
                        currentMouth == 11)){
                    currentMouth++;
                    currentDay = 1;
                }else if(currentDay > 29 &&currentMouth == 2 && isDay(currentYear)){
                    currentMouth++;
                    currentDay = 1;
                }else if(currentDay > 28 &&currentMouth == 2 && !isDay(currentYear)) {
                    currentMouth++;
                    currentDay = 1;
                }

                if (currentMouth > 12) {
                    currentYear++;
                    currentMouth = 1;
                }

                if(currentYear == lastYear && currentMouth == lastMonth && currentDay == lastDay){
                    System.out.println("D-"+dDay);
                    break;
                }


            }

        }
    }
}

github

 

GitHub - junjange/JavaAlgorithm: 내가 푼 코딩 테스트 문제와 해결법(Java)

내가 푼 코딩 테스트 문제와 해결법(Java). Contribute to junjange/JavaAlgorithm development by creating an account on GitHub.

github.com