본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.3] 시작 날짜와 끝 날짜의 사이 날짜 구하기 / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 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

코드 해석

 

포문을 돌리는 이유 : month 이전의 월(month)들의 날(day)의 합을 구하기 위해서. (예: month 3일 시 1월 + 2월 / 31 + 28)

 

1. month_list[] 배열은 1월이 배열 0방에 저장되어있기 때문에 month - 1까지 포문을 돌린다.  

   month가 2일 시 포문은 i가 1일 때 포문을 탈출하므로 총 1바퀴 돈다. 

   // month가 1일 시 이전의 월이 없기 때문에 바로 포문을 탈출한다. 

2. total에 month-1의 날들의 합을 더한다. 

3. total에 해당 달(month)의 날(day)을 더한다. 

i month_list[month + i] total
0 month_list[0] 31
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++) //1
		total += month_list[month + i]; //2
        
	total += day;//3
    
	return total;
    
}

전체코드

 

더보기
#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 = 0; i < month - 1; i++)
		total += month_list[month + i];
	total += day;
	return total;
}

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("The return value of solution function : %d\n", ret);
}

cos pro 2급 기출문제

github

반응형

댓글