티스토리 뷰
문제
시작 날짜와 끝 날짜가 주어질 때, 두 날짜가 며칠만큼 떨어져 있는지(D-day)를 구하려 합니다. 이를 위해 다음과 같이 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 |
1월 2일부터 2월 2일까지 31일 차이가 난다.
#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;
int total = 0;
//빈칸
return 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);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}
#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 = 1; i <month; i++){
total += month_list[i-1] ;
}
total += day;
return 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);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}
코드해석
단계 | 과정 |
main | main함수에서 시작월,일,끝나는월,일을 정해준 후 각각의 값을 solution함수의 매개변수로 차례대로 넘긴다. |
solution | 1월1일부터 시작일까지의 길이를 구하기 위해 func_a함수를 호출한다. |
func_a | func_a 함수는 1월1일부터 해당하는 날짜가 얼마나 떨어져있는지 구하는 함수이다. month_list배열에는 1월부터 12월까지의 마지막 날짜가 들어있다. 1월부터 해당월-1 까지 for문을 통해 전체 day를 더한다. (1월1일~3월7일일 경우 1,2월의 전체 day를 더함) for문이 종료된 후 남은 day를 더한다. (3월1일~3월7일까지의 길이를 더함) 더한 값 total에서 -1하여 return한다. (모든 월은 1일부터 시작하기 때문에 -1를 더함) |
solution | return된 값을 start_total에 저장한 후, 1월1일부터 끝나는일까지의 길이를 구하기 위해 func_a함수를 호출한다. |
func_a | 위 단계와 동일함 |
solution | return된 값을 end_total에 저장한 후 start_total - end_total을 반환한다. |
main | 출력한 후 프로그램이 종료된다. |
'[코테] > [GroomEdu]' 카테고리의 다른 글
[COS PRO 2급] 5번_배열의 순서 뒤집기 (C/C++) (0) | 2021.05.05 |
---|---|
[COS PRO 2급] 6번_369게임 박수의 개수는? (C/C++) (1) | 2021.05.05 |
[COS PRO 2급] 4번_등장하는 가장 많은 수와 적은수 구하기 (C/C++) (0) | 2021.05.03 |
[COS PRO 2급] 2번_백화점 등급별 할인적용 (C/C++) (0) | 2021.05.02 |
[COS PRO 2급] 1번_단체 티셔츠 주문하기 (C/C++) (0) | 2021.05.02 |
댓글
공지사항
최근에 올라온 글
TAG
- groom
- 알고리즘
- c언어
- C
- c언어 기출문제
- Cos Pro
- 프로그래머스
- CosPro
- 구름 기출문제
- YBM기출
- 구름에듀
- 배열활용문제
- COSPRO 2급
- cospro기출문제
- Java
- lv1
- 코딩테스트
- 연습문제
- 배열
- C++
- YBM
- 자바
- 구름에듀 기출문제
- lv2
- programmers
- 기출문제
- 1급
- cospro기출
- groomedu
- 코스프로
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함