티스토리 뷰

 

 

문제

알파벳 문자열이 주어질 때, 연속하는 중복 문자를 삭제하려고 합니다.

예를 들어, "senteeeeenccccceeee"라는 문자열이 주어진다면, "sentence"라는 결과물이 나옵니다.

영어 소문자 알파벳으로 이루어진 임의의 문자열 characters가 매개변수로 주어질 때, 연속하는 중복 문자들을 삭제한 결과를 return하도록 solution함수를 작성하였습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 코드가 올바르게 동작하지 않습니다. 

주어진 코드에서 한 부분만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

 

 

 

 


 

 

주어진 코드

#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 = 0; 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);
}

 

결과

characters return
"senteeeencccccceeee" "ssentence"

 

 

 

 


 

 

 

 

 

 

수정된 코드

더보기
더보기
#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);
}

 

 

 

 

 

 

코드분석 / 오류해결

단계 과정
main 포인터변수 characters를 이용하여 문자열 "senteeeencccccceeee"를 선언하고 solution함수를 호출한다.
solution malloc함수를 이용하여 결과값을 저장할 포인터변수 result의 메모리를 동적으로 선언한다.
결과값 문자열의 길이를 저장할 result_len을 선언한다.
result[0]에 characters의 첫 글자를 저장하고, result에 값이 들어왔기 때문에 result_len++를 진행한다.
solution - for characters의 글자가 전 글자와 같지 않았을 때, result[i]에 해당하는 글자를 할당한 후 result_len++를 진행한다. 

예를 들어 dinnosour에서 i와 n는 같은 글자가 아니기 때문에 result[1]에 i를 저장하고,
그 다음 단계에서 n과 n은 같기 때문에 i값만 1 증가하여 n과 o가 비교되며 result[2]에 저장된다.
solution 문자열의 가장 마지막에는 NULL이 추가되기 때문에, result[result_len] = NULL;를 진행한다.
(생략해도 오류는 발생하지 않음)
결과값 문자열 result를 return한다.
main 결과를 출력한 후 프로그램이 종료된다.

 

 

 

 

예시

characters return
"senteeeencccccceeee" "sentence"

 

 

 

 

 

 

GroomEdu

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

댓글