티스토리 뷰

문제

 

시작 날짜와 끝 날짜가 주어질 때, 두 날짜가 며칠만큼 떨어져 있는지(D-day)를 구하려 합니다. 이를 위해 다음과 같이 3단계로 간단히 프로그램 구조를 작성했습니다.(단, 윤년은 고려하지 않습니다.)

  • 1단계. 시작 날짜가 1월 1일로부터 며칠만큼 떨어져 있는지 구합니다.
  • 2단계. 끝 날짜가 1월 1일로부터 며칠만큼 떨어져 있는지 구합니다.
  • 3단계. (2단계에서 구한 날짜) - (1단계에서 구한 날짜)를 구합니다.

시작 날짜의 월, 일을 나타내는 startmonth, startday, 끝 날짜의 월, 일을 나타내는 endmonth, endday가 매개변수로 주어질 때, 시작 날짜와 끝 날짜가 며칠만큼 떨어져 있는지 return하도록 solution함수를 작성했습니다. 이때, 위 구조를 참고하여 중복되는 부분은 func_a라는 함수로 작성했습니다. 코드가 올바르게 동작할 수 있도록 빈칸을 알맞게 채워주세요. 

 

 

 

 

 

 

예시

start_month start_day end_month end_day return
1 2 2 2 31

1월 2일부터 2월 2일까지 31일 차이가 난다.

 

 


 

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int func_a(int month, int day){
	int month_list[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	int total = 0;
	int total = 0;
    //빈칸
	
	return total - 1;
}
int solution(int start_month, int start_day, int end_month, int end_day) {
	int start_total = func_a(start_month, start_day);
	int end_total = func_a(end_month, end_day);
	return end_total - start_total;
}

int main() {
	int start_month = 1;
	int start_day = 2;
	int end_month = 2;
	int end_day = 2;
	int ret = solution(start_month, start_day, end_month, end_day);

	printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}

 


 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int func_a(int month, int day){
	int month_list[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	int total = 0;
	for(int i = 1; i <month; i++){
		total += month_list[i-1] ;
	}
	total +=  day;
	
	return total - 1;
}
int solution(int start_month, int start_day, int end_month, int end_day) {
	int start_total = func_a(start_month, start_day);
	int end_total = func_a(end_month, end_day);
	return end_total - start_total;
}

int main() {
	int start_month = 1;
	int start_day = 2;
	int end_month = 2;
	int end_day = 2;
	int ret = solution(start_month, start_day, end_month, end_day);

	printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}

 

 

 

 


 

 

 

코드해석

단계 과정
main main함수에서 시작월,일,끝나는월,일을 정해준 후 각각의 값을 solution함수의 매개변수로 차례대로 넘긴다.
solution 1월1일부터 시작일까지의 길이를 구하기 위해 func_a함수를 호출한다.
func_a func_a 함수는 1월1일부터 해당하는 날짜가 얼마나 떨어져있는지 구하는 함수이다.
month_list배열에는 1월부터 12월까지의 마지막 날짜가 들어있다.
1월부터 해당월-1 까지 for문을 통해 전체 day를 더한다. (1월1일~3월7일일 경우 1,2월의 전체 day를 더함)
for문이 종료된 후 남은 day를 더한다. (3월1일~3월7일까지의 길이를 더함)
더한 값 total에서 -1하여 return한다. (모든 월은 1일부터 시작하기 때문에 -1를 더함)
solution return된 값을 start_total에 저장한 후,
1월1일부터 끝나는일까지의 길이를 구하기 위해 func_a함수를 호출한다.
func_a 위 단계와 동일함
solution return된 값을 end_total에 저장한 후 start_total - end_total을 반환한다.
main 출력한 후 프로그램이 종료된다.

 

 

 

댓글