본문 바로가기

cospro2급/cospro_1차

2021-05-03

cospro 2급 3번 문제

시작 날짜와 끝 날짜의 사이 날짜 구하기

 

문제설명

시작 날짜와 끝 날짜가 주어질 때, 두 날짜가 며칠만큼 떨어져 있는지 구한다.

 

1단계 : 시작 날짜가 1월 1일로부터 며칠만큼 떨어져 있는지 구한다.

2단계 : 끝 날짜가 1월 1일로부터 며칠만큼 떨어져 있는지 구한다.

3단계 : (2단계에서 구한 날짜)-(1단계에서 구한 날짜를) 구한다.

 

시작 날짜의 월, 일을 나타내는 start_month, start_day, 끝 날짜의 월, 일을 나타내는 end_month, end_day가 

매개변수로 주어진다. 시작 날짜와 끝 날짜가 며칠만큼 떨어져 있는지 return 하도록 solution 함수를 완성한다.

이때 중복되는 부분인 1월 1일부터 얼마나 떨어져있는지 계산하는 부분은 func_a라는 함수로 작성했다.

 

매개변수 설명

시작 날짜의 월, 일을 나타내는 start_month, start_day, 끝 날짜의 월, 일을 나타내는 end_month, end_day

매개변수로 주어진다. 

1. 잘못된 날짜가 주어지는 경우는 없다.

2. 끝 날짜는 항상 시작 날짜보다 뒤에 있는 날이 주어진다.

3. 끝 날짜가 다음 해로 넘어가는 경우는 없다.

 

start_month <= end_month를 항상 만족함.

start_month = end_month라면 start_day <= end_day를 항상 만족함

 

각 달의 날짜 수는 1월부터 순서대로[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]이며, 윤년은 고려하지 않는다.

 

return 값 설명

시작 날짜와 끝 날짜가 며칠만큼 떨어져 있는 지를 return한다.

 

예시 설명

시작 날짜는 1월 2일이고, 끝 날짜는 2월 2일이다.

1. 1월 2일은 1월 1일로부터 1일만큼 지났다.

2. 2월 2일은 1월 1일로부터 32일만큼 지났다.

3. 32 - 1 = 31이다.

4. 따라서 1월 2일과 2월 2일은 31일만큼 떨어져 있다.

 

로직 설명

 

solution함수는 main()함수에서 시작날짜의 월과 일, 끝 날짜의 월과 일을 받는다. 그 후 시작 날짜가 1월 1일로부터

며칠이 지났는지 계산을 하기 위해 func_a를 호출한다. 이때 func_a엔 시작 날짜의 월과 일을 넘겨준다. 그리고 

끝 날짜과 1월 1일로부터 며칠만큼 떨어져 있는지 계산하기 위해 func_a를 호출한다. 이때 끝 날짜의 월과 일을

넘겨준다.

(func_a는 문제 설명에 나와있다. )

main함수에서는 시작날짜의 월과 일, 끝날짜의 월과 일을 solution함수에 넘겨준다. 그후 return된 값을 출력한다.

 

코드설명

#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}; //1~12월까지의 마지막 날짜
	int total = 0;
	for(int i = 0; i <month ; i++) 
		total += month_list[i];
	total += month_list[month] ;
	return total - 1;
}
//month전까지 돌리는 이유는 1월부터 입력받은 달까지의 마지막 날짜를 더해야하기 때문이다
//total은 마지막 날짜들을 더한다. 그리고 입력받은 달까지 더해준다.
//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); //solution 함수 호출

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

 

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

'cospro2급 > cospro_1차' 카테고리의 다른 글

2021-05-05  (0) 2021.05.05
2021-05-05  (0) 2021.05.05
2021-05-03  (0) 2021.05.03
2021-05-02  (0) 2021.05.02
2021-05-02  (0) 2021.05.02