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);
}
'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 |