1 Day 1 Algorithms

[2019.01.17] Nested Logic

곰돌찌 2019. 1. 17. 12:59

Problem


Objective 
Today's challenge puts your understanding of nested conditional statements to the test. You already have the knowledge to complete this challenge, but check out the Tutorial tab for a video on testing!

Task 
Your local library needs your help! Given the expected and actual return dates for a library book, create a program that calculates the fine (if any). The fee structure is as follows:

  1. If the book is returned on or before the expected return date, no fine will be charged (i.e.: .
  2. If the book is returned after the expected return day but still within the same calendar month and year as the expected return date, .
  3. If the book is returned after the expected return month but still within the same calendar year as the expected return date, the .
  4. If the book is returned after the calendar year in which it was expected, there is a fixed fine of .

Input Format

The first line contains  space-separated integers denoting the respective , and  on which the book was actually returned. 
The second line contains  space-separated integers denoting the respective , and  on which the book was expected to be returned (due date).

Constraints

Output Format

Print a single integer denoting the library fine for the book received as input.

Sample Input

9 6 2015
6 6 2015

Sample Output

45

Explanation

Given the following return dates: 
Actual:  
Expected: 

Because , we know it is less than a year late. 
Because , we know it's less than a month late. 
Because , we know that it was returned late (but still within the same month and year).

Per the library's fee structure, we know that our fine will be . We then print the result of  as our output.


How I solved the problem


# Calendar로 getTimeInMills()로 먼저 return date와 actual date를 비교하여 actual date가 더 이후일 경우에는 0을 먼저 반환하는 코드가 있어야함!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.*;
import java.util.*;
 
public class Solution {
 
    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner scan = new Scanner(System.in);        
        //compare
        int actualDay = scan.nextInt();
        int actualMonth = scan.nextInt();
        int actualYear = scan.nextInt();
 
        int expectedDay = scan.nextInt();
        int expectedMonth = scan.nextInt();
        int expectedYear = scan.nextInt();
        scan.close();
 
        Calendar actualCal = Calendar.getInstance();
        Calendar expectedCal = Calendar.getInstance();
 
        actualCal.set(actualYear, actualMonth - 1, actualDay);
        expectedCal.set(expectedYear, expectedMonth - 1, expectedDay);
 
        //actualCal < expectedCal
        if (actualCal.getTimeInMillis() <= expectedCal.getTimeInMillis()) {
            System.out.println(0);
        } else {
            //different year
            if (actualYear > expectedYear) {
                System.out.println(10000);
            } else {
                //different month
                if (actualMonth > expectedMonth) {
                    int monthDiff = actualMonth - expectedMonth;
 
                    System.out.println(500 * monthDiff);
                } else {
                    int dayDiff = actualDay - expectedDay;
 
                    System.out.println(15 * dayDiff);
                }
 
            }
        }
    }
}
 
 
cs

[출처 : https://www.hackerrank.com ]