1948

HoRi·2022년 7월 28일
0

SWEA_PY

목록 보기
25/32

1948. 날짜 계산기

월 일로 이루어진 날짜를 두 개 입력 받아, 두 번째 날짜가 첫 번째 날짜의 며칠째인지를 출력하는 프로그램을 작성하라.

[제약사항]

월은 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부터 시작한다.)

코딩

T = int(input())					# 입력 받은 값을 정수형으로 변환해서 T에 저장

for i in range(1, T+1):				# 1부터 T까지 1씩 증가하는 반복문
    li = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    								# 1월부터 12월까지 일 수를 저장해 놓은 리스트 li
                                    # 0은 인덱스를 활용한 값 계산을 편하게 하기 위해서
    
    FM, FD, LM, LD = map(int, input().split())
    								# 빈 칸을 기준으로 입력 받은 값을 정수형으로 변환해서 FM, FD, LM, LD에 순서대로 저장
                                    # FM(첫 번째 달), FD(첫 번째 날), LM(두 번째 달), LD(두 번째 날)
    if (1 <= FM <= 12 and 1 <= LM <= 12 and 1 <= FD <= li[FM] and 1 <= LD <= li[LM]):
    								# 제약사항에 따른 조건문
        for j in range(FM):			# 0부터 첫 번째 달 - 1까지 1씩 증가하며 반복
            FD += li[j]				# 리스트 li에서 달의 일 수를 가지고와서 첫 번째 날에 더함
        for k in range(LM):			# 0부터 두 번째 달 -1까지 1씩 증가하며 반복
            LD += li[k]				# 리스트 li에서 달의 일 수를 가지고와서 두 번째 날에 더함
        min_day = LD - FD + 1		# 두 번째 날에서 첫 번째 날을 뺀 값에 1을 더한 값을 min_day에 저장
        print('#{} {}'.format(i, min_day))
        							# format함수를 사용해서 테스트 케이스와 정답을 출력
    else:							# 제약사항에 해당되지 않을 경우
        print('#{} -1'.format(i))	# Format함수를 사용해서 테스트 케이스와 오류 메세지를 출력
        break						# 탈출
        
        
 # 이 문제에서 고려해야 할 점은 두 번째 날에서 첫 번째날을 빼서 그 값을 구해야 하는데
 # 그냥 빼서 구하기에는 입력 받은 값이 월과 일을 받았고 각 달마다 일 수도 다르다.
 # 제약사항에 따라서 값을 찾을 경우 이 차를 쉽게 구하는 방법은 1월 1일부터 입력 받은 첫 번째 달 - 1에
 # 첫 번째 일 수를 더한 값과 1월 1일부터 두 번째 달 - 1에 두 번째 일 수를 더한 값를 각각 구한 뒤
 # 이 둘의 차를 구하고 +1을 해주면 두 날짜의 차가 구해진다는 점을 알고 문제에 접근하면 쉽게 풀 수 있다.



모든 출처는 SW Expert 아카데미에 있습니다.

해당 글은 영리적 목적이 아닌 학습의 기록으로 사용되었습니다. 오기나 잘못된 부분은 말씀해주시면 수정하겠습니다.

profile
무지성 작성소

0개의 댓글