티스토리 뷰

 

코드 바로보기💻

 

 

문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.


제한사항

  • s는 길이가 1 이상, 100이하인 스트링입니다.

입출력 예

s return
"abcde" "c"
"qwer" "we"

 

 

초기화면

 

 

완성 코드

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


// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* s) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char* answer = (char*)malloc(sizeof(char)*2);
    int size = strlen(s);

    if(size%2==0){
        answer[0] = s[size/2 - 1];
        answer[1] = s[size/2];
        answer[2] = NULL;
    }
    else{
        answer[0] = s[size/2];
        answer[1] = NULL;
    }
    return answer;
}

 

코드 분석

단계 과정
변수 & 배열 char포인터변수(배열) answer를 malloc을 사용하여 크기를 동적으로 지정한다.
주어진 문자열(s)의 길이가 저장된 변수 size
if 가운데 글자 구하기

주어진 문자열(s)의 길이가 짝수일 경우 s[절반-1] + s[절반]이 저장되어야 한다.
주어진 문자열(s)의 길이가 홀수일 경우 s[절반]이 저장되어야 한다.
마지막 방에는 문자열의 끝을 지정하기 위해 NULL를 할당해야 한다.

이때 절반이란?
문자열의 길이가 5일때, 5/2 = 2 즉 s의 2번방이 가운데 글자이다.
문자열의 길이가 8일때, 8/2 = 4 즉 s의 3번방과 4번방이 가운데 글자이다.

 

 

주의할점

순조롭게 풀다가, 아래 사진처럼 계속해서 결과 뒤에 쓰레기값이 붙어 나왔다.
왜그런가,, 했더니

마지막 방에 NULL값을 할당했더니 해결되었다!
//비정상 작동 코드
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

char* solution(const char* s) {
    char* answer = (char*)malloc(sizeof(char)*2);
    int size = strlen(s);

    if(size%2==0){
        answer[0] = s[size/2 - 1];
        answer[1] = s[size/2];
    }
    else{
        answer[0] = s[size/2];
    }
    return answer;
}

 

 

의문점

malloc을 사용하여 answer의 크기를 지정할 때, 1이던 sizeof(char)*3이던 같은 값이 나온다. (에러가 나지 않음)
왜그럴가?

💾문자열 포인터와 malloc 참고자료

코딩도장

 

 

 


링크

 

 

코딩테스트 연습 - 가운데 글자 가져오기

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s ret

programmers.co.kr

 

About Me

💻GitHub/KimSky904 KimSky904 - Overview Department of New Media Software. KimSky904 has 8 repositories available. Follow their code on GitHub. github.com

code-review.tistory.com

 

댓글