백준 1308 D-day 자바 풀이
본문 바로가기

알고리즘/백준

백준 1308 D-day 자바 풀이

728x90
반응형

안녕하세요 놀이방사장입니다.

 

이번 포스팅은

백준 1308 D-day 포스팅

자바 풀이입니다.

 

 

1308번: D-Day

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

www.acmicpc.net

 

현재날짜부터 D-day를 입력으로 주면 이 두 날짜의 차이를 출력하면 된다.

근데 이 두 날짜의 차이가 1000년이 넘을 시 gg를 출력한다.

 

먼저 처음에는 자바에서 제공하는 

LocalDate와 LocalDateTime , Period를 이용해서 풀려고 했는데 윤년때문에 계산이 틀려짐

 

package me.joyeonggyu;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main{
    public static int[] getYear(int year){
        int[] month = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31};
        if(year%4==0 && year%100 != 0 || year%400==0){
            month[1] = 29;
        }
        return month;
    }

    public static int getDays(int year, int month , int day){
        int days = 0;
        int[] months;
        // 각 년도 계산
        for(int i=1; i<year; i++){
            months = getYear(i);
            for(int j=0; j<12; j++){
                days += months[j];
            }
        }
        // 남은 월 계산
        months = getYear(year);
        for(int i=0; i< month-1; i++){
            days += months[i];
        }
        days+=day;
        return days;
    }
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String[] Tdate = br.readLine().split(" ");
        String[] Ddate = br.readLine().split(" ");

        int Tyear = Integer.parseInt(Tdate[0]);
        int Tmonth = Integer.parseInt(Tdate[1]);
        int Tday = Integer.parseInt(Tdate[2]);

        int Dyear = Integer.parseInt(Ddate[0]);
        int Dmonth = Integer.parseInt(Ddate[1]);
        int Dday = Integer.parseInt(Ddate[2]);

        int Tdays = getDays(Tyear, Tmonth , Tday);
        int Ddays = getDays(Dyear, Dmonth , Dday);

        if( (Dyear - Tyear > 1000) || (Dyear - Tyear == 1000 && Dmonth - Tmonth > 0) || (Dyear - Tyear == 1000 && Dmonth - Tmonth == 0 && Dday - Tday >= 0) ){
            bw.write("gg");
        }else{
            bw.write("D-" + (Ddays - Tdays));
        }

        bw.flush();
        bw.close();

    }
}

 

이 풀이는 1년1월1일부터 -> 함수를 넣은 시간까지 일수를 구해줌

 

그럼 오늘이랑 D-day의 일수가 각각 구해지고 그걸 뺴주면 됨

그 전에 1000년이상 차이나면 gg를 출력해야하기 때문에 예외처리 해주는 거 까먹으면 안됨

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준]1340 - 연도 진행바 - JAVA  (0) 2023.12.05
[백준]1312 - 소수 - JAVA  (1) 2023.12.04
백준[1251] 단어나누기 - 자바(JAVA)  (1) 2023.12.02
백준11650 - 좌표정렬  (0) 2023.12.01
[1436]백준 - 영화감독 숌 - JAVA  (0) 2023.11.28