티스토리 뷰

코드 바로보기💻

 

 

문제 설명

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월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

입출력 예

a b result
5 24 "TUE"

 

 

초기화면

 

 

완성 코드

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

char* solution(int a, int b) {
    const char* day[] = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
    // 리턴할 값은 메모리를 동적 할당해주세요.
    char* answer = (char*)malloc(sizeof(char)*3);
    int day_num[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
    int count=0;
    
    for(int i=0;i<a-1;i++){
        count+=day_num[i];
    }
    count+=b-1;
        
    answer = day[count%7];
    return answer;
}

 

 

 

코드 분석

단계 과정
변수 & 배열 요일에 대한 문자열 day
(1월 1일이 금요일이므로 계산하기 편하게 FRI를 첫번째 값으로 지정했다.)
날짜에 대한 요일을 저장할 배열(문자) answer
각 월별 날의 수 day_num
1월 1일부터 지정한 날짜가 얼마나 떨어져있는지 계산할 변수 count
for 월별 날의 수 누적하기

for(int i=0;i<a-1;i++)
지정된 날짜의 월(한달이 꽉 채워지지 않은 경우)를 제외하기 위하여 a-1까지 반복하여
count에 각 월별 날의 수를 누적한다.

예를 들어,
1월 1일부터 3월 20일 사이에 있는 날의 수를 구하기 위해서는
1월의 전체 날 + 2월의 전체 날 + 3월 1일~20일
을 해야하므로 for문에서는 day_num[0] + day_num[1]만을 계산한다.
count += b-1 마지막 달의 날짜 누적하기

for문을 빠져나온 후, 위의 예시에서 3월 1일~20일를 할 차례이다.
날짜는 1월 0일부터 시작하는 것이 아니라, 1일부터 시작하므로
b(지정된 날)-1만큼을 count에 더해야 한다.
answer = day[count%7] 해당 날짜의 요일 구하기

모든 요일은 일주일(7일)을 주기로 반복하기 때문에,
day배열의 count%7방이 곧 주어진 날짜의 요일이 된다. (0번방 ~ 6번방) 

 

 


 

링크

 

코딩테스트 연습 - 2016년

2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까

programmers.co.kr

 

 

 

About Me

💻GitHub/KimSky904 KimSky904 - Overview Department of New Media Software. KimSky904 has 8 repositories available. Follow their code on GitHub. github.com

code-review.tistory.com

 

댓글