Notice
Recent Posts
Recent Comments
Link
관리 메뉴

great minds think alike

[C] 프로그래머스 스쿨_7주차 문제 1: 배열 원소의 길이 본문

SWLUG/프로그래머스 스쿨 (C)

[C] 프로그래머스 스쿨_7주차 문제 1: 배열 원소의 길이

gapsoo 2023. 8. 20. 13:19

 

 

 


[1] 문제

 

문제 설명

문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ strlist 원소의 길이 ≤ 100
  • strlist는 알파벳 소문자, 대문자, 특수문자로 구성되어 있습니다.

 

입출력 예

strlist result
["We", "are", "the", "world!"] [2, 3, 3, 6]
["I", "Love", "Programmers."] [1, 4, 12]

 

입출력 예 설명

입출력 예 #1

  • ["We", "are", "the", "world!"]의 각 원소의 길이인 [2, 3, 3, 6]을 return합니다.

 

입출력 예 #2

  • ["I", "Love", "Programmers."]의 각 원소의 길이인 [1, 4, 12]을 return합니다.

 

 

 


[2] 정답 및 해석

 

#.1 정답 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
 
int* solution(const char* strlist[], size_t strlist_len) {
    int* answer = (int*)malloc(strlist_len * sizeof(int)); // 길이 배열 할당
 
    // 각 문자열의 길이를 계산하여 배열에 저장하는 과정
    for (size_t i = 0; i < strlist_len; ++i) {
        answer[i] = strlen(strlist[i]); // 각 문자열의 길이를 계산하여 배열에 저장
    }
 
    return answer; // 길이가 저장된 배열을 반환
}
cs

 

#.2 해석

위 코드는 문자열 배열 strlist의 각 원소의 길이를 계산하여 배열에 저장하고, 그 배열을 반환하는 함수를 정의하고 있다.

 

 

1. #include 문: 이 코드는 표준 입출력 및 문자열 처리를 위해 필요한 헤더 파일들을 포함하고 있다.


2. int* solution(const char* strlist[], size_t strlist_len): solution 함수는 정수형 포인터를 반환하는 함수로, 입력으로 문자열 배열 strlist와 그 배열의 길이 strlist_len이 주어진다.


3. int* answer = (int*)malloc(strlist_len * sizeof(int));: 문자열의 길이를 저장할 정수 배열 answer를 동적 할당하여 생성한다. strlist_len * sizeof(int)는 strlist_len 개의 정수가 들어갈만한 메모리 공간을 할당하라는 의미이다.


4. for (size_t i = 0; i < strlist_len; ++i) { ... }: for 루프를 통해 각 문자열의 길이를 계산하여 배열에 저장하는 부분을 정의한다. i는 0부터 시작하여 strlist_len - 1까지 순회한다.

5. answer[i] = strlen(strlist[i]);: strlen 함수를 사용하여 strlist의 i번째 문자열의 길이를 계산하고, 그 길이를 answer 배열의 i번째 요소에 저장한다.

6. return answer;: 길이가 저장된 배열인 answer를 반환합니다. 이렇게 해서 문자열 배열의 각 원소의 길이가 저장된 배열이 반환된다.

 

 

 

 


[3] 추가 학습

 

 

 

✏️ https://exponent.tistory.com/88

 

[C] Study: 동적 메모리 - (1) 동적 할당 메모리란?

(1) 동적 할당 메모리란? • 프로그램이 메모리를 할당받는 방법에는 정적(static)과 동적(dynamic)의 두 가지 방법이 있다. • 정적 메모리 할당: 프로그램이 시작되기 전에 미리 정해진 크기의 메모

exponent.tistory.com

 

 

✏️ https://exponent.tistory.com/89

 

[C] Study: 동적 메모리 - (2) malloc()과 free()

(2) malloc()과 free() • 동적 메모리 할당 절차에 대해 알아보자. • 동적 메모리 할당은 도서관에서 책을 빌리는 절차와 비슷하다. 도서관에서는 필요한 책을 신청하고 책이 준비되면 받아오는 단

exponent.tistory.com

 

 

 

✏️ 정답으로는 인정되었지만, 주의할 점이 있다.

 

1. 메모리 해제: 코드에서 동적으로 할당한 메모리를 해제하는 부분이 누락되어 있습니다. 함수가 끝난 후에는 할당한 메모리를 반드시 free 함수를 사용하여 해제해야 합니다. 이를 처리하지 않으면 메모리 누수가 발생할 수 있습니다.

2. 메모리 할당 실패 체크: malloc 함수는 메모리 할당에 실패할 경우 NULL을 반환합니다. 이 코드에서는 메모리 할당 실패 시에 대한 처리가 없으므로, 메모리 할당이 제대로 이루어졌는지 체크하는 것이 좋습니다.

출처: 챗 GPT

 

 


[4] 느낀 점

 

동적 메모리 할당... 많이 해봐야 늘겠지? 개념도 생소하고 사용하기도 어렵다. 

 

화이팅합시다...