[1차] 문제 9. 중복문자 삭제하기 풀이 및 해석
■ 문제설명
알파벳 문자열이 주어질 때, 연속하는 중복 문자를 삭제하려고 합니다. 예를 들어, "seteeeenccccccceeeee"라는 문자열이 주어진다면, "sentence"라는 결과물이 나옵니다.
영어 소문자 알파벳으로 이루어진 임의의 문자열 characters가 매개변수로 주어질때, 연속하는 중복 문자들을 삭제한 결과를 return하도록 solution 함수를 작성하였습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 코드가 올바르게 동작하지 않습니다.
주어진 코드에서 한 부분만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.
■ 매개변수 설명
영어 소문자 알파벳으로 이루어진 임의의 문자열 characters가 solution함수의 매개변수로 주어집니다.
characters는 알파벳 소문자로만 이루어져 있습니다.
characters의 길이는 10 이상 100이하 입니다.
■ return값 설명
characters에서 연속하는 중복 문자를 제거한 문자열을 return해주세요.
■ 예시
characters | return |
"senteeenccccceeeee" | "sentence" |
■초기내용
■ 답안
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
char* solution(char* characters) {
char* result = malloc(sizeof(char)*strlen(characters));
int result_len = 0;
result[0] = characters[0];
result_len++;
for (int i = 1; i < strlen(characters); i++) {
if (characters[i - 1] != characters[i]) {
result[result_len] = characters[i];
result_len++;
}
}
result[result_len] = NULL;
return result;
}
int main() {
char* characters = "senteeeencccccceeee";
char* ret = solution(characters);
printf("solution 함수의 반환 값은 %s 입니다.\n", ret);
}
■답안 풀이 및 해석
(※ 실행 흐름 순으로 해석됩니다.)
코드작성
int main() {
char* characters = "senteeeencccccceeee";
char* ret = solution(characters);
printf("solution 함수의 반환 값은 %s 입니다.\n", ret);
}
// char형 포인터 변수 characters 선언
// char형 포인터 변수 ret에 solution함수의 반환값 저장
// printf()함수를 이용하여 결과값 출력
char* solution(char* characters) {
char* result = malloc(sizeof(char)*strlen(characters));
int result_len = 0;
result[0] = characters[0];
result_len++;
for (int i = 1; i < strlen(characters); i++) {
if (characters[i - 1] != characters[i]) {
result[result_len] = characters[i];
result_len++;
}
}
result[result_len] = NULL;
return result;
}
// char형 포인터변수 result에 characters의 길이만큼 메모리 할당
// result[0]방에 characters[0]을 대입
// for문을 이용하여 characters의 길이만큼 반복 -> 0은 위에서 처리했으니, 1부터 처리
// if문으로 앞의 값과 중복확인후 결과 저장
■실행 결과
COS PRO 2급 기출문제 - C언어 - 구름EDU
YBM IT에서 시행하는 COS Pro 자격증 기출문제를 직접 풀어볼 수 있는 실습 위주의 강좌입니다.
edu.goorm.io