본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Day of the Programmer

Day of the Programmer | HackerRank

 

Day of the Programmer | HackerRank

Given year, determine date of the 256th day of the year.

www.hackerrank.com

 

<문제>

매 해 256일째 되는 날이 프로그래머의 날이다. 년도를 입력받으면 그 해 프로그래머의 날을 출력하는 문제이다. 

input: 년도를 입력받는다.

output: 그 해의 프로그래머의 날을 출력한다.

 

 

<코드>

char* dayOfProgrammer(int year) {
    char* str= malloc(100 * sizeof(char));
    int day = 256 - 215;
    int feb;
    if(year < 1918){
        if( year%4 == 0){
            feb =29;
        }
        else
            feb = 28; 
        }
    else if(year== 1918){
        feb = 15 ;
        }

    else{
        if((year%400 == 0) || (year%4 == 0 && year%100 != 0)){
            feb = 29;
        }
        else{
            feb = 28;
        }
    }
 
    day=day-feb;
    sprintf(str,"%d.09.%d",day,year);
    return str;
}

<풀이>

  1700년부터 1917년에는 Julian calendar을 썼고, 1918년에는 Julian calender에서 Gregorian calendar로 바뀌었다.
그래서 1918년에는 1월 31일 다음날이 2월 14일이었다. 입력받을 수 있는 년도의 범위가 1700년부터 2700년까지 이므로 고려해야 할 사항은 1918년과 윤년이다.
  먼저 년도가 1918년도보다 작은지, 같은지, 큰지에 따라 조건을 나누었고, 내부 조건으로는 윤년인지 아닌지를 계산했다. 1918년보다 작으면 Julian calender이고, 4로 나눠떨어지면 2월은 29일까지 있다. 1918년은 2월이 15일이다. 1918년 이후는 4로 나눠떨어지고 100으로는 나눠떨어지지 않거나, 400으로 나눠떨어지면 2월이 29일이다. if 조건식을 이용해 feb의 값을 정하고, 256에서 2월을 제외한 값인 215를 뺀 day 변수에 feb까지 빼면 해당 년도의 날짜를 알 수 있다. 이를 통해 해당 년도의 날짜를 출력하여 문제를 풀 수 있었다.

 

 

<실행결과>