[LeetCode] Count Days Spent Together

아르당·2026년 9월 6일

LeetCode

목록 보기
511/561
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

앨리스와 밥은 각자 비지니스 미팅을 위해 로마를 여행하고 있다.
4개의 문자열 arriveAlice, leaveAlice, arriveBob, leaveBob가 주어진다. 앨리스는 arriveAlice부터 leaveAlice까지 도시에 있을 것이고, 밥은 arriveBob부터 leaveBob까지 도시에 있을 것이다. 각 문자열은 "MM-DD" 형태의 5개의 문자로 되어 있고, 날짜의 월과 일에 대응한다.
앨리스와 밥이 로마에 함께 있는 일수를 반환해라.

Example

#1
Input: arriveAlcie = "08-15", leaveAlice = "08-18", arriveBob = "08-16", leaveBob = "08-19"
Output: 3
Explanation: 앨리스는 로마에 8월 15일부터 8월 18일까지 있을 것이다. 밥은 로마에 8월 16일부터 8월 19일까지 있을 것이다. 둘 다 로마에 8월 16일, 17일, 18일에 있고, 답은 3이다.

#2
Input: arriveAlcie = "10-01", leaveAlice = "10-31", arriveBob = "11-01", leaveBob = "12-31"
Output: 0
Explanation: 앨리스와 밥이 로마에 함께 있는 날은 없어서, 0을 반환한다.

Constraints

  • 모든 날짜는 "MM-DD" 형태로 제공된다.
  • 앨리스와 밥의 도착일은 출발일보다 빠르거나 같다.
  • 주어진 날짜는 평년의 유효한 날짜이다.

Solved

class Solution {
    public int countDaysTogether(String arriveAlice, String leaveAlice, String arriveBob, String leaveBob) {
        int aA = Days(arriveAlice);
        int lA = Days(leaveAlice);
        int aB = Days(arriveBob);
        int lB = Days(leaveBob);

        if(lA < aB || lB < aA){
            return 0;
        }

        return Math.abs(Math.max(aA, aB) - Math.min(lA, lB)) + 1;
    }

    private int Days(String s){
        int[] month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int sum = 0;
        int m = Integer.valueOf(s.substring(0, 2));
        int d = Integer.valueOf(s.substring(3, 5));

        for(int i = 0; i < m - 1; i++){
            sum += month[i];
        }

        return d + sum;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글