[6차][구현] 문제3) 단체 유니폼 맞추기/ memset 함수

Yun Young Choi·2022년 11월 8일

CodingTest-C

목록 보기
14/15
post-thumbnail

이번에도... 구현문제인데
memset은 처음 보는 거였다...!!

구글링을 해서 알아보는 단계를 거치고 코딩 테스트 문제를 풀기로 했다.


memset 함수란?

C, C++의 메모리를 초기화 해줄 수 있는 함수이다.
헤더 파일은 memory.h, string.h 둘 중 하나 사용해도 무관하다.
둘 다 이 함수를 포함

함수의 원형

void memset(void ptr, int value, size_t num);

  1. 첫 번째 인자 : 세팅하고자 하는 메모리의 시작 주소
  2. 두 번째 인자 : 메모리에 세팅하고자 하는 값
  3. 세 번째 인자 : 길이, 바이트 단위로써 메모리의 크기 단위 (보통 sizeof(type)으로 사용)

반환값 성공 -> ptr 반환, 반환값 실패 -> NULL 반환


그럼 저 문제에서 memset의 의미는

memset(answer, 0, sizeof(int) * 4);

answer를 시작주소로 모두 0으로 초기화, 그리고 int(4byte)로 4조각씩 쪼개겠다!
아마 옷의 사이즈가 네 개 있는데 그것을 담을 크기를 int로 네 개로 쪼개려나 보다~


--

main 설명

int main() {
    int people[] = {97, 102, 93, 100, 107};
    int people_len = 5;
    int *ret = solution(people, people_len);

    printf("solution 함수의 반환 값은 [");
    for(int i = 0; i < 4; i++) {
        if(i != 0)
            printf(", ");
        printf("%d", ret[i]);
    }
    printf("] 입니다.\n");
}
  1. 사람들의 옷 사이즈가 담긴 배열 people
  2. 사람들의 옷 사이즈가 담긴 배열의 길이 people
  3. ret변수에 solution 함수 반환값을 담는다.
  4. 반복문으로 배열값을 반환

solution 설명

int* solution(int people[], int people_len) {
    int *answer = (int *) malloc(sizeof(int) * 4);
    memset(answer, 0, sizeof(int) * 4);
    // 빈칸
    return answer;
}
  1. answer 변수 동적할당
  2. memset 함수로 메모리 초기화

빈칸 채우기

int* solution(int people[], int people_len) {
    int *answer = (int *) malloc(sizeof(int) * 4);
    memset(answer, 0, sizeof(int) * 4);
    for(int i = 0; i < people_len; i++) {
			if(people[i] < 95) {
				answer[0]++;
			}
			else if(people[i] < 100) {
				answer[1]++;
			}
			else if(people[i] < 105) {
				answer[2]++;
			}
			else {
				answer[3]++;
			}
		}
    return answer;
}
  1. for문을 사람 수만큼 돌린다.
  2. 사이즈를 비교하며 사이즈 순서대로 알맞은 사이즈에 증감연산자 사용
  3. S, M, L, XL 이 순서대로 넣는 것이기에 answer[0]은 S가 되고...(생략)

전체 코드

int* solution(int people[], int people_len) {
    int *answer = (int *) malloc(sizeof(int) * 4);
    memset(answer, 0, sizeof(int) * 4);
    for(int i = 0; i < people_len; i++) {
			if(people[i] < 95) {
				answer[0]++;
			}
			else if(people[i] < 100) {
				answer[1]++;
			}
			else if(people[i] < 105) {
				answer[2]++;
			}
			else {
				answer[3]++;
			}
		}
    return answer;
}

int main() {
    int people[] = {97, 102, 93, 100, 107};
    int people_len = 5;
    int *ret = solution(people, people_len);

    printf("solution 함수의 반환 값은 [");
    for(int i = 0; i < 4; i++) {
        if(i != 0)
            printf(", ");
        printf("%d", ret[i]);
    }
    printf("] 입니다.\n");
}

실행결과

profile
안냥하세요

0개의 댓글