Search

PROB1959

수준
D2
상태
HELP
비고
테스트 케이스 10 개중 9개 만족
문제
월 일로 이루어진 날짜를 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
복사