본문 바로가기

c언어

[프로그래머스 레벨0]-모음 제거 C언어

728x90

요즘 백준을 풀다가 프로그래머스 문제 풀기에 돌입했다.
레벨0짜리부터 올 클리어 하려고 했는데 50문제쯤 풀었나 생각보다 복잡해서 당황했다.
반례를 찾을 수 없으니 답답하다..

[문제 설명]


영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

[제한사항]


my_string은 소문자와 공백으로 이루어져 있습니다.1 ≤ my_string의 길이 ≤ 1,000

입출력 예
[my_string result ]
["bus" "bs" ]
["nice to meet you" "nc t mt y"]


모음을 제거하되 빈칸도 냅둬야 하는 상황이다.


[소스코드]

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

char* solution(const char* my_string) {
    char* answer = (char*)calloc(1,sizeof(char));
                int k=0;
     for(int i=0;i<strlen(my_string);i++){
            
if(my_string[i]=='a'||my_string[i]=='e'||my_string[i]=='u'||my_string[i]=='o'||my_string[i]=='i'){
              answer[k]=my_string[i+1];           
          }
        else {
            answer[k]=my_string[i];
            k++;
             }
            }
                 
           return answer;
}

기본 헤더에 string.h 를 사용하여 strlen 함수를 사용했고,
프로그래머스가 동적 할당 메모리를 사용해야되는데 이건 아직도 어렵다.. malloc 함수로 하면 쓰레기값이 출력 되는 경우가 많아서 calloc으로 해결했다...


문제로 돌아와서,
만약 my_string 배열에서 자음이 들어온다면
answer[k] 배열에 넣어주고 k+1 을 해준다.
만약 모음이 나오면 그다음배열 값을 넣어주고,
다시 비교한다. 포인트는 모음일때 k를 그대로 고정시켜
다음 값을 계속 넣어줌으로써 모음을 삭제해 주는 형식이다.


[후기]

백준은 처음부터 내가 다 손수 쓰는것이지만,
프로그래머스는 scanf도없고 반례도 찾기 힘들어서
상당히 난감하다. 더 열심히 해봐야지뭐..