SW 꿈나무
[Level 1][C] 2016년 본문
문제
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각
SUN,MON,TUE,WED,THU,FRI,SAT
입니다.예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 TUE를 반환하세요.
제한 조건
- 2016년은 윤년입니다.
- 2016년 a월 b일은 실제로 있는 날입니다. (13월이나 45일 등의 날짜는 주어지지 않습니다.)
Example
Input 1 : a = 5, b = 24
Output 1 : "TUE"
Code
#include <stdio.h> #include <stdbool.h> #include <stdlib.h> char* solution(int a, int b) { int temp=4; // 정수형 변수 temp 선언 및 대입. 요일 계산 위해 선언 char weekday[] = {'S','U','N','M','O','N','T','U','E', 'W','E','D','T','H','U','F','R','I', 'S','A','T'}; // 문자형 배열 weekday에 요일의 각 문자 대입 char* answer = (char*)malloc(sizeof(char)*4); // answer에 char size * 4 만큼의 메모리 동적 할당 if(a<=2) { // a가 2 이하이고 if(a==1){ // a가 1이면 temp=temp+b; // temp는 temp + 4 } else { // a가 2이면 temp=temp+31+b; // temp는 temp + 31 + b; } } else if(a>=3&&a<=7) { // a가 3 이상이고 7 이하이고 if(a%2==0){ // a가 짝수이면 temp=temp+(a-1)*31-(a/2)+b; // temp=temp+(a-1)*31-(a/2)+b } else { // a가 홀수이면 temp=temp+(a-1)*31-(a/2+1)+b; // temp=temp+(a-1)*31-(a/2+1)+b } } else { // a가 8이상이면 temp=temp+(a-1)*31-a/2+b; // temp=temp+(a-1)*31-a/2+b } temp=temp%7; // temp 는 temp를 7로 나눈 나머지. 요일 판단 for(int i=0;i<3;i++) { // 3만큼 반복 answer[i] = weekday[i+temp*3]; // answer에 weekday[i+temp*3]부터 3칸 대입 } answer[3]='\0'; // answer의 마지막에 NULL 문자 대입 return answer; // answer 반환 }
Other Code
#include <stdio.h> #include <stdbool.h> #include <stdlib.h> char* solution(int a, int b) { char* WEEK[7] = {"THU","FRI","SAT","SUN","MON","TUE","WED"}; // 문자열 포인터 WEEK 선언 및 각 요일 대입 int MONTH[12] = {31,29,31,30,31,30,31,31,30,31,30,31}; // 정수형 배열 MONTH 선언 및 각 월의 날짜 대입 int count_MONTH = 0; // 정수형 변수 count_MONTH 선언 및 초기화 for(int i=0;i<a-1;i++){ // a-1 만큼 반복 count_MONTH += MONTH[i]; // count_MONTH 에 각 월의 날짜 add } count_MONTH+=b; // count_MONTH 에 b 대입 char* answer = (char*)malloc(sizeof(char)*3); // answer에 char size * 3 만큼의 메모리 동적 할당 answer = WEEK[count_MONTH%7]; // answer에 WEEK[count_MONTH % 7] 대입 ( 해당 요일 ) return answer; // answer 반환 }
'Algorithm > Programmers' 카테고리의 다른 글
[Level 1][C] 가운데 글자 가져오기 (0) | 2020.03.26 |
---|---|
[Level 1][C] 문자열을 정수로 바꾸기 (0) | 2020.03.26 |
[Level 1][C] 문자열을 정수로 바꾸기 (0) | 2020.03.26 |
[Level 1][C] 문자열 다루기 기본 (0) | 2020.03.26 |
[Level 1][C] 수박수박수박수박수박수? (0) | 2020.03.26 |
Comments