매월 일수 |
1월 : 31일
소스 코드 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> #include <stdbool.h> #include <stdlib.h> char* solution(int a, int b) { char *DayOfTheWeek[] = { "THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED" }; int DayOfMonth[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int Total = 0; scanf("%d %d", &a, &b); a--; while(a > 0){ Total += DayOfMonth[--a]; } Total += b; // 리턴할 값은 메모리를 동적 할당해주세요. char* answer = (char*)malloc(sizeof(char) * 4); answer = DayOfTheWeek[Total % 7]; return answer; } |
소스 풀이 |
2016년 1월 1일 기준으로 금요일입니다.
2차원 배열에 목요일 부터 금요일 순서대로 배열에 넣은 이유?
char *DayOfTheWeek[] = { "THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED" };
1월 1일의 7일 뒤인 1월 8일에 다시 금요일이 되게 됩니다. 총 일수에 7을 나누어 1이 되게 되면 금요일, 0이 되게 되면 목요일이 되기 때문에 0번째 배열에 목요일, 1번째 배열에는 금요일 순서대로 요일이 들어가게 됩니다. 7로 나눈 나머지에 따라서 해당 배열의 요일과 일치하게 되는 것입니다.
2016년 기준 당월 일수?
int DayOfMonth[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
2번째 배열에는 각 달에 해당하는 일수를 배열에 받았습니다.
해당 날짜의 총 일수 계산 방법?
마지막으로 요일을 구하기 위해서 총 일수를 구하고 7로 나누어 줘야 합니다. 총 일수를 구하는 방법은 1월 ~ 전월의 합 + 당월의 일수 입니다. 예를 들어 7월 21일이면 1 ~ 6월의 일수 + 21일이 되는 것입니다. 배열로는 DayOfMonth[5]까지 합입니다.
제일 처음에 a--를 해준 이유는 당월의 일수는 따로 계산하기 위해서입니다. 당월의 일수를 계산해주는 부분이 마지막 줄에 있는 Total += b 부분입니다.
해당 날짜의 요일 계산 방법?
answer = DayOfTheWeek[Total % 7];
1월 1일의 기준으로 7일 뒤에 1월 8일에 2번째 금요일이 됩니다. 즉, 7일을 주기로 요일을 계산하게 되므로 총일 수에서 7을 나눈 나머지 값을 배열에 넣으면 요일이 됩니다.
2019/10/24 - [프로그래밍] - 블루투스의 모든 것 - Bluetooth COD(Class Of Device)란?
2019/11/05 - [프로그래밍] - 블루투스의 모든 것 - Bonding과 Pairing의 차이
2019/08/13 - [MCU/AVR] - ATmega128 타이머를 이용한 DC모터 제어
2019/08/25 - [프로그래밍/C#] - C# 마우스 제어(클릭, 좌표 이동)
'프로그래밍 > C' 카테고리의 다른 글
예제로 알아보는 재귀 함수 (0) | 2021.01.27 |
---|---|
이중 연결 리스트(Double linked list), 이중 원형 연결 리스트 예제 (2) | 2020.01.05 |