[1차]문제3. 시작 날짜와 끝 날짜의 사이 날짜 구하기 풀이 및 해석
■ 문제 설명
시작날짜와 끝 날짜가 주어질 때, 두 날짜가 며칠만큼 떨어져 있는지 (D-day)를 구하려 합니다. 이를 위해 다음과 가이 3단계로 간단히 프로그램 구조를 작성했습니다.(단, 윤년은 고려하지 않습니다.)
→ 1단계. 시작 날짜가 1월 1일로부터 며칠만큼 떨어져 있는지 구합니다.
→ 2단계. 끝 날짜가 1월 1일로 부터 며칠만큼 떨어져 있는지 구합니다.
→ 3단계. (2단계에서 구한 날짜) - (1단계에서 구한 날짜)를 구합니다.
시작날짜의 월, 일을 나타내는 startmonth, startday
끝날짜의 월, 일을 나타내는 endmonth, endday가 매개변수로 주어질때,
시작 날짜와 끝날짜가 며칠만큼 떨어져 있는지 return 하도록 solution함수를 작성했으며,
위 구조를 참고하여 중복되는 부분은 func_a라는 함수로 작성했습니다.
코드가 올바르게 동작할 수 있도록 빈칸을 알맞게 채워주세요.
■ 매개변수 설명
시작 날짜의 워르 일을 나탄ㅐ는 startmonth, startday, 끝 날짜의 월, 일을 나타내는 endmonth, endday가 solution함수의 매개변수로 주어집니다.
→ 잘못된 날짜가 주어지는 경우는 없습니다.
→ 끝 날짜는 항상 시작 날짜보다 뒤에 있는 날이 주어집니다.
→ 끝 날짜가 다음해로 넘어가는 경우는 주어지지 않습니다.
1. 즉, startmonth<=endmonth를 항상 만족합니다.
2. startmonth = endmonth라면 starday <= endday를 항상 만족합니다.
→ 각 달의 날짜 수는 1월부터 순서대로 [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]이며, 윤년은 고려하지 않습니다.
■ return값 설명
시작 날짜와 끝 날짜가 며칠만큼 떨어져 있는지 return 해 주세요.
■ 예시
start_month | start_day | end_month | end_day | return |
1 | 2 | 2 | 2 | 31 |
■ 예시 설명
시작날짜 : 1/2
끝날짜 : 2/2
→ 1월 2일은 1월1일로부터 1일만큼 지난 날입니다.
→ 2월 2일은 1월 1일로부터 32일만큼 지난 날입니다.
→ 32 - 1 = 31입니다.
따라서 1월 2일과 2월 2일은 31일만큼 떨어져 있습니다.
■ 초기 내용
위 내용을 바탕으로 우리는 func_a함수 안의 빈칸을 작성해야한다.
■ 답안
■ 답안 풀이 및 해석
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);
}
//start_month와 start_day의 초기값 지정
//end_month와 end_day의 초기값 지정
//solution함수를 이용하여 구한 return값을 ret에 저장
//printf()함수를 이용하여 출력
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;
}
//start_total을 이용해 시작날짜와 1/1일사이의 날짜 수를 구한다.
//end_total을 이용해 끝날짜와 1/1일 사이의 날짜수를 구한다.
//start_total - end_total을 하여 시작날짜와 끝날짜 사이의 날이 며칠인지 구한다.
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 = 0; i < month-1; i++){
total += month_list[i];
}
total += day;
return total - 1;
}
//매개변수로 정수형 변수 month와 day를 받는다.
//month_list배열 안에는 12달별 날짜의 개수가 들어가있다.
//반복문을 이용하여 month-1만큼 반복
//(1월 1일~1월 2일까지의 날짜 수 : 1 -> 만약 month만큼 i를 돌리면 31+1만큼이 나온다)
//total에 각 달 날짜수에 맞는 값을 저장
//반복문이 끝나면 날짜 저장
//total에서 자신을 뺸 -1을 해서 return
■ 실행 결과
COS PRO 2급 기출문제 - C언어 - 구름EDU
YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.
edu.goorm.io