-
[C언어]프로그래머스 "2016년" & 동적 메모리 할당이란..C언어 2019. 12. 23. 14:56
문제 설명
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" week라는 함수를 만들어 숫자가 들어오면 해당 요일을 반환할 수 있 도록 하고,
month에는 1월 1일(금)을 기준으로 2월 1일(월)의 경우,
금요일과 월요일은 (토,일,월) 3일이 차이나므로 3을 더하도록하는 식으로 month배열을 작성하였습니다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>char* solution(int a, int b) {
char* answer = (char*)malloc(3);
const char* week[] = { "THU","FRI","SAT","SUN","MON","TUE","WED" };
int month[12] = { 0,3,4,0,2,5,0,3,6,1,4,6};
int i = (month[a-1] + b) % 7;
return answer=week[i];다른사람들의 풀이와 비교해본 결과,
대부분 비슷하게 풀었지만 month각 월의 날짜갯수{31,29,31,30,31,30,31,31,30,31,30,31}로 하여
for문을 이용해 5월이면 1,2,3,4월의 날짜를 다 더한 후 7로 나눈다는 점이 달랐습니다.
그리고 문제에 malloc함수를 이용하여 동적으로 메모리를 할당하라는 부분이 나오는데,
동적 메모리할당이란,
사용자가 프로그램을 구동하여 지역변수나 전역변수를 선언하면 해당 변수들은 각 함수나 main문이 끝날때까지 메모리를 차지하고 있습니다.
이 경우 우리는 변수를 선언할 때 해당 변수의 타입을 알려주어 어느정도 크기의 메모리를 할당 할 것인지를 미리 알려 주어야 합니다.
하지만 이와 다르게 변수를 선언할 때 어느정도의 메모리를 사용해야할지 정해지지 않고, 입력을 받거나 상황에 따라 사용하는 메모리의 크기가 다른 경우가 발생할 수 있는데, 이때는 메모리를 미지수의 크기만큼 할당하고 사용해야합니다.
이때 매모리를 할당하는 방식을 동적 메모리 할당이라 합니다.
위 문제의 경우 malloc(3)으로 "3"이라고 크기를 지정해 주었지만,
예를 들어 회원을 관리하는 프로그램을 만든다고 가정할 경우, 몇명의 회원들의 정보를 저장해야할지 알 수 없는 경우가 발생할 수 있습니다. 이경우 넉넉하게 수십만명의 회원 정보를 받을 수 있도록 작성할 수도 있지만 메모리를 동적으로 할당하여 회원이 몇명인지 입력받아 프로그램을 구성할 수도 있습니다.
이와 같이 동적으로 메모리를 할당하는 경우 해당 변수는 지역변수나 전역변수와 같이 특정 필드에서만 존재하는 변수가 아니므로 변수 사용이 끝나면 반드시 메모리를 해제하여 불필요한 메모리 사용을 지양해야합니다.
'C언어' 카테고리의 다른 글
[C언어] 프로그래머스 1단계 "두 정수 사이의 합" (0) 2019.12.20 [C언어]비트 연산자와 홀수 짝수 구분하기 (0) 2019.12.17 [C언어]scanf와 scanf_s에 대하여 (0) 2019.12.16 [C언어]#include <stdio.h>에 대하여 (0) 2019.12.13 [C언어]C언어 시작하기 (0) 2019.12.13