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:
- If the book is returned on or before the expected return date, no fine will be charged (i.e.: .
- If the book is returned after the expected return day but still within the same calendar month and year as the expected return date, .
- If the book is returned after the expected return month but still within the same calendar year as the expected return date, the .
- 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 ]
'1 Day 1 Algorithms' 카테고리의 다른 글
[2019.01.22] RegEx, Patterns, and Intro to Databases (0) | 2019.01.22 |
---|---|
[2019.01.21] Testing (0) | 2019.01.21 |
[2019.01.16] Running Time and Complexity (0) | 2019.01.16 |
[2019.01.15] More Linked Lists (0) | 2019.01.15 |
[2019.01.14] BST Level-Order Traversal (0) | 2019.01.14 |
댓글