문제
월 일로 이루어진 날짜를 2개 입력 받아, 두 번째 날짜가 첫 번째 날짜의 며칠째인지 출력하는 프로그램을 작성하라.
[제약 사항]
월은 1 이상 12 이하의 정수이다. 각 달의 마지막 날짜는 다음과 같다.
1/31, 2/28, 3/31, 4/30, 5/31, 6/30, 7/31, 8/31, 9/30, 10/31, 11/30, 12/31
두 번째 날짜가 첫 번째 날짜보다 항상 크게 주어진다.
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 4개의 수가 주어진다.
첫 번째 수가 월을 나타내고 두 번째 수가 일을 나타낸다. 그 다음 같은 형식으로 두 번째 날짜가 주어진다.
[출력]
출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다. (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
풀이
비고
•
날짜가 같을 때 0 으로 나오게 수정
•
아무래도 month1 이 12 일 때가 문제인듯 함 → 근데 어떻게 풀 지 모르겠음
◦
제약사항이 뭔가 애매한 너낌,,
package SWExpertAcademy.D2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class PROB1959 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int month1 = Integer.parseInt(st.nextToken());
int day1 = Integer.parseInt(st.nextToken());
int month2 = Integer.parseInt(st.nextToken());
int day2 = Integer.parseInt(st.nextToken());
int answer = 0;
if (month1 == month2) {
if (day1 != day2) {
answer = day2 - day1 + 1;
}
} else {
answer = startMonth(month1, day1) + betweenMonth(month1, month2) + day2;
}
sb.append("#").append(i + 1).append(" ").append(answer).append("\n");
}
System.out.println(sb);
}
// 첫째 달 계산 하는 함수
public static int startMonth(int month1, int day1) {
if (month1 == 4 || month1 == 6 || month1 == 9 || month1 == 11) {
return 30 - day1 + 1;
} else if (month1 == 2) {
return 28 - day1 + 1;
} else {
return 31 - day1 + 1;
}
}
// 중간 달 계산하는 함수
public static int betweenMonth (int month1, int month2) {
int sum = 0;
for (int i = month1 + 1; i < month2; i++) {
if (i == 4 || i == 6 || i == 9 || i == 11) {
sum += 30;
} else if (month2 == 2) {
sum += 28;
} else {
sum += 31;
}
}
return sum;
}
}
Java
복사