-
문제 설명
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. -
제한 사항
- str은 길이 1 이상인 문자열입니다.
-
입출력 예
s return "Zbcdefg" "gfedcbZ" -
풀이 1. 버블정렬을 이용하자.
버블정렬은 시간복잡도가 정렬방법 중 가장 높다.
그럼에도 불구하고 가장 쉽기 때문에, 이용하곤 한다.
버블정렬에 대한 이해가 필요하다면 :
https://gmlwjd9405.github.io/2018/05/06/algorithm-bubble-sort.html
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* s)
{
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
char* answer;
int i = 0;
int answer_len = strlen(s);
answer = (char *)malloc(sizeof(char) * answer_len + 1);
while (i < answer_len)
{
answer[i] = s[i];
i++;
}
answer[i] = '\0';
i = 0;
int j;
int temp;
while (i < answer_len - 1)
{
j = 0;
while (j < answer_len - 1 - i)
//j가 0부터 answer_len - 1 - i, 즉
//(끝에서 두번째 인덱스 - 반복횟수)만큼 반복
//(참고로 끝에서 첫번째 인덱스는
//answer[answer_len - 1]이다.)
{
if (answer[j] < answer[j + 1])
{
temp = answer[j];
answer[j] = answer[j + 1];
answer[j + 1] = temp;
}
j++;
}
i++;
}
return (answer);
}
두 번째 i = 0 이전까지는 굳이 저렇게 표현하지 않더라도
string.h 헤더 파일 안에 있는 strcpy(혹은 memcpy)를 이용하면 된다.
_
malloc을 len + 1만큼 해주고
len번째에 널캐릭터를 박아주는 이유를 이해하지 못했다면
C언어의 문자열의 속성부터 알아보고 돌아오자.
_
그리고 숫자가 아닌 문자열에 대해서도 해당 정렬이 동작하는 이유는
- ascii코드상에서도 알파벳은 순서대로 되어 있고,
- ascii코드상에서는 소문자가 대문자보다 뒤에 있기 때문이다.
'Algorithm' 카테고리의 다른 글
알고리즘 1부터 n까지의 합 - 가우스 (0) | 2020.06.04 |
---|---|
알고리즘 공부, 어떻게 시작할까 (0) | 2020.06.04 |
programmers - 두 정수 사이의 합 (0) | 2020.03.12 |
Programmers - 가운데 글자 출력하기 (0) | 2020.03.12 |
Programmers - 2016년 (0) | 2020.03.12 |
최근댓글