코린이의 소소한 공부노트

[LeetCode/Easy] 2409. Count Days Spent Together 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 2409. Count Days Spent Together

무지맘 2023. 6. 23. 08:28

1. Input

1) String arriveAlice

2) String leaveAlice

3) String arriveBob

4) String leaveBob

 

2. Output

1) Alice[arriveAlice, leaveAlice]동안 로마에 있고, Bob[arriveBob, leaveBob]동안 로마에 있다. 둘이 동시에 로마에 있는 날 수를 반환

 

3. Constraint

1) 날짜 형식은 모두 "MM-DD"이다.

2) AliceBob은 로마에 도착한 날 당일에 로마를 출발하지 않았다.

3) 날짜는 모두 같은 연도의 날짜이기 때문에 윤년을 따질 필요가 없다.

4) 2월은 28일까지 있다.

 

4. Example

Input: arriveAlice = "08-15", leaveAlice = "08-18", arriveBob = "08-16", leaveBob = "08-19" -> Output: 3

Input: arriveAlice = "10-01", leaveAlice = "10-31", arriveBob = "11-01", leaveBob = "12-31" -> Output: 0

설명:

- 함께 로마에 있던 날짜는 816, 17, 18일 총 3일이다.

- Alice가 떠난 다음날부터 Bob이 로마에 있었기 때문에 둘이 함께 있던 날은 없다.

 

5. Code

1) 첫 코드(2023/06/23)

class Solution {
    public int countDaysTogether(String arriveAlice, String leaveAlice, String arriveBob, String leaveBob) {
        int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        String[] date = {arriveAlice, leaveAlice, arriveBob, leaveBob};
        int[] count = new int[4]; // days of aA, lA, aB, lB
        for(int i=0 ; i<4 ; i++){
            String[] md = date[i].split("-");
            int month = Integer.valueOf(md[0]);
            count[i] = Integer.valueOf(md[1]);
            for(int j=0 ; j<month-1 ; j++)
                count[i] += days[j];
        }
        if(count[0]<=count[2]) { // Alice -> Bob
            return Math.max(Math.min(count[1],count[3])-count[2]+1,0);
        } else{ // Bob -> Alice
            return Math.max(Math.min(count[1],count[3])-count[0]+1,0);
        }
    }
}

- 47%, 56%