5글자 이상인 단어 배열하기

Yun Young Choi·2022년 6월 22일

CodingTest-C

목록 보기
6/15
post-thumbnail


5글자 이상인 단어를 이어붙여서 return 하기


main 함수 / 설명

int main() {
    char* words1[5] = {"my", "favorite", "color", "is", "violet"};
    int words_len1 = 5;
    char* ret1 = solution(words1, words_len1);

    printf("solution 함수의 반환 값은 %s 입니다.\n", ret1);
    
    char* words2[3] = {"yes", "i", "am"};
    int words_len2 = 3;
    char* ret2 = solution(words2, words_len2);

    printf("solution 함수의 반환 값은 %s 입니다.\n", ret2);
}
  1. words1 배열에 단어 할당
  2. words_len1을 5로 할당
  3. 캐릭터형 변수 ret1에 words1과 words_len1을 매개변수로 갖는 solution 함수 할당
  4. words2 배열에 단어 할당
  5. words_len2를 3으로 할당
  6. 캐릭터형 변수 ret2에 words2와 words_len2을 매개변수로 갖는 solution 함수 할당

solution 함수 / 설명

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
//include문 추가 가능

char* solution(char* words[], int words_len) {
    char* answer = "";
    
    //빈칸
    	
    return answer;
}
  1. words와 words_len을 매개변수로 받는 solution 문자형 함수
  2. answer 리턴

solution 빈칸 채우기 / 설명

char* solution(char* words[], int words_len) {
    char* answer = "";
		answer = (char*)malloc(sizeof(char)* words_len); //words_len만큼 answer에 동적할당
	
		for(int i = 0; i < words_len; i++) { //words_len만큼 반복
			answer[i] = 0; //answer의 0번째부터 10번째까지 0으로 초기화
		}
	
    for (int i = 0; i < words_len; i++) { //words_len만큼 반복
        if (strlen(words[i]) >= 5) { //strlen(길이 구하는 함수)로 words[i]번째의 단어가 개수가 5개 이상인지 판단
            strcat(answer, words[i]); //5개 이상이라면 strcat(문자열 합치는 함수)로 answer에 words[i]번째 문자열 합침
        }
    }
		
		if(strlen(answer) == 0) { //만약 answer의 문자열 개수가 0이라면
			answer = "empty"; //answer는 empyl!
		}
    
    	
    return answer;
}

부가 설명

answer의 값이 왜 0일 때인 이유 🤔

if(strlen(answer) == 0) {
			answer = "empty";
		}

먼저, answer 전체를 0으로 초기화했기 때문이고

for(int i = 0; i < words_len; i++) { 
			answer[i] = 0; 
		}

만약 words[i]번째의 길이가 5 이상이라면 answer에 words[i]번째를 합했다.
그러나 words의 길이가 조건문에 만족되지 못했을 때엔 answer와 합해지지 못한다.
그러면 answer는 자연히 0으로 남게 된다.

for (int i = 0; i < words_len; i++) {
        if (strlen(words[i]) >= 5) {
            strcat(answer, words[i]);

전체 코드

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

char* solution(char* words[], int words_len) {
    char* answer = "";
		answer = (char*)malloc(sizeof(char)* words_len);
	
		for(int i = 0; i < words_len; i++) {
			answer[i] = 0;
		}
	
    for (int i = 0; i < words_len; i++) {
        if (strlen(words[i]) >= 5) {
            strcat(answer, words[i]);
        }
    }
		
		if(strlen(answer) == 0) {
			answer = "empty";
		}
    
    	
    return answer;
}

int main() {
    char* words1[5] = {"my", "favorite", "color", "is", "violet"};
    int words_len1 = 5;
    char* ret1 = solution(words1, words_len1);

    printf("solution 함수의 반환 값은 %s 입니다.\n", ret1);
    
    char* words2[3] = {"yes", "i", "am"};
    int words_len2 = 3;
    char* ret2 = solution(words2, words_len2);

    printf("solution 함수의 반환 값은 %s 입니다.\n", ret2);
}

실행 결과

profile
안냥하세요

0개의 댓글