Cospro 2급/C언어

[1차]문제3. 시작 날짜와 끝 날짜의 사이 날짜 구하기 풀이 및 해석

SRin23 2021. 5. 3. 22:30

■ 문제 설명

시작날짜와 끝 날짜가 주어질 때, 두 날짜가 며칠만큼 떨어져 있는지 (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일만큼 떨어져 있습니다.

 

■ 초기 내용

[출처]goormedu COSPRO 2급 기출문제 1차-3번 초기내용

 

위 내용을 바탕으로 우리는 func_a함수 안의 빈칸을 작성해야한다.

 

■ 답안

문제 3.  시작 날짜와 끝 날짜의 사이 날짜구하기 답안

 

■ 답안 풀이 및 해석

 

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

 

■ 실행 결과

문제 3. 시작 날짜와 끝 날짜의 사이 날짜구하기 실행결과

 

https://edu.goorm.io/learn/lecture/16921/cos-pro-2%25EA%25B8%2589-%25EA%25B8%25B0%25EC%25B6%259C%25EB%25AC%25B8%25EC%25A0%259C-c%25EC%2596%25B8%25EC%2596%25B4

 

COS PRO 2급 기출문제 - C언어 - 구름EDU

YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.

edu.goorm.io