본문 바로가기
프로그래머스코딩테스트연습풀이/C언어

[프로그래머스/C언어] 글자 지우기

by 코코쵸마 2023. 8. 4.

문제

문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

 

솔루션

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

// indices_len은 배열 indices의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* my_string, int indices[], size_t indices_len) {
    // return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
    char* answer = (char*)malloc(strlen(my_string) * sizeof(int));
    int i, j;
    int tmp;
    for(i = 0; i < indices_len - 1; i++)
        for(j = i + 1; j < indices_len; j++)
        {
            if(indices[i] > indices[j])
            {
                tmp = indices[i];
                indices[i] = indices[j];
                indices[j] = tmp;
            }
        }
    j = 0;
    int k = 0;
    
    for(i = 0; i < strlen(my_string); i++){
        if(i != indices[j])
           answer[k++] = my_string[i];
        else
            j++;
    }
    answer[k] = '\0';
    return answer;
}

문자열 관련 함수를 써서 하면 좀 더 짧고 깔끔했을 것 같은데

마땅한 함수가 생각이 안나서

indices함수를 sorting한 후에 비교하는 방법으로 풀었다

 

다른사람의 풀이를 보니

string에 my_string을 복사하고

for(int i = 0; i < indices_len; i++)

string[indices[i]] = ' '

로 indices배열의 값의 index에 해당하는 string에서의 값을 모두 ' '으로 만들고

' '이 아닌경우만 복사하도록하면

sorting과정을 쓰지 않아도 될 것 같다

 

https://school.programmers.co.kr/learn/courses/30/lessons/181900

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr