문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
앨리스와 밥은 각자 비지니스 미팅을 위해 로마를 여행하고 있다.
4개의 문자열 arriveAlice, leaveAlice, arriveBob, leaveBob가 주어진다. 앨리스는 arriveAlice부터 leaveAlice까지 도시에 있을 것이고, 밥은 arriveBob부터 leaveBob까지 도시에 있을 것이다. 각 문자열은 "MM-DD" 형태의 5개의 문자로 되어 있고, 날짜의 월과 일에 대응한다.
앨리스와 밥이 로마에 함께 있는 일수를 반환해라.
#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을 반환한다.
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;
}
}