➰ 취업준비/알고리즘 문제풀이

[C언어][프로그래머스] Level 1 - 2016년

 사과개발자 2020. 6. 16. 18:13

저는 현재 '42서울' 3기 2차를 기다리고 있습니다.
코로나때문에 계속 미뤄지고 있지만 언젠가 시작할 라피신과정을 위해
시간이 날때마다 틈틈히 알고리즘 문제들을 풀어보려합니다.
학교 공부로 인해 1년간 코테준비를 손놓고 있었기 때문에
아주 쉬운 단계부터 차근차근! 풀어나가보겠습니다 

처음 쓰는 글들인 만큼 부족한 점도 많겠지만 따뜻한 응원부탁드리고
혹시 틀린부분이나 조언이 있다면 따끔한 지적부탁드립니다! ٩(๑❛❛๑)۶


문제 설명

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

 

CODE

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

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

 

필요한 개념  & 문제 요구사항 

윤년

2월은 보통 2월 28일까지 있지만 4년에 한번씩 돌아오는 윤년에만 2월이 29일까지 존재합니다.
즉, 풀이를 위해 각 달의 마지막 날을 저장하는 배열 FINAL_DAY를 만들 때 2월을 29일로 저장해야 합니다.

malloc (문제의 요청사항)

malloc은 동적할당으로 사용할 메모리의 공간을 할당하는 것입니다.

char* answer = (char*)malloc(sizeof(arr));

이 부분은 sizeof(arr)만큼의 사이즈를 동적할당 한 후 첫번째 주소를 char*로 형변환하여 answer에 저장하는 과정입니다.
(char*)로 형변환을 해주는 이유는 malloc은 (void*)를 리턴하기 때문입니다.

+유의사항

배열의 인덱스는 0부터 시작하지만 날짜는 1부터 시작하기 때문에
total_day에 b가 아닌 b-1을 더해주는 것이 중요합니다!!

+출처

https://programmers.co.kr/learn/courses/30/lessons/12901

 

코딩테스트 연습 - 2016년

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

programmers.co.kr

 

반응형