티스토리 뷰
문제
알파벳 문자열이 주어질 때, 연속하는 중복 문자를 삭제하려고 합니다.
예를 들어, "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" |
goorm
구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.
www.goorm.io
'[코테] > [GroomEdu]' 카테고리의 다른 글
[COS PRO 2급] 2차 1번_최대한 많은 쌍의 장갑 갯수 구하기 (C/C++) (0) | 2021.05.08 |
---|---|
[COS PRO 2급] 10번_평균 이하의 개수 구하기 (C/C++) (0) | 2021.05.07 |
[COS PRO 2급] 8번_펠린드롬 확인하기 (C/C++) (0) | 2021.05.06 |
[COS PRO 2급] 7번_영어 수강 대상자 수 구하기 (C/C++) (0) | 2021.05.06 |
[COS PRO 2급] 5번_배열의 순서 뒤집기 (C/C++) (0) | 2021.05.05 |
댓글
공지사항
최근에 올라온 글
TAG
- lv1
- C++
- cospro기출
- Cos Pro
- groomedu
- 알고리즘
- 구름 기출문제
- C
- COSPRO 2급
- 1급
- 구름에듀
- programmers
- CosPro
- 코스프로
- YBM
- 자바
- lv2
- 프로그래머스
- YBM기출
- c언어 기출문제
- 배열활용문제
- 코딩테스트
- 기출문제
- 구름에듀 기출문제
- c언어
- 배열
- groom
- Java
- 연습문제
- cospro기출문제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함