[C/C++] C언어 스택(Stack)을 이용한 간단한 문자열 압축하기Programming/C, C++2021. 4. 23. 00:45
Table of Contents
반응형
안녕하세요!
이번 시간에 실습할 내용은 문자열 압축입니다.
여러 가지 자료구조 중에서 스택을 이용해서 문자열을 압축하는 실습을 진행하겠습니다.
아마 C를 하다 보면 문자열 압축에 대해 한 번쯤 보실 텐데
문자열 압축이란?
예를 들어
"aaaaaaaa"
라는 문자열이 있을 때 같은 문자가 여러 번 반복되는 것을 압축하여 공간을 절약하는 방법입니다.
8개의 a가 8a로 나타내 지면서 8글자가 2글자가 되는 것이죠.
원래는 압축 효율을 더 높이기 위해 더 심화된 알고리즘을 사용하는데,
문자열 압축이 어떤 식으로 진행되는지만 참고하시면 될 것 같습니다.
C program code
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef int element;
element stack[MAX_SIZE];
int top = -1;
int is_empty()
{
return (top == -1);
}
int is_full()
{
return (top == (MAX_SIZE - 1));
}
void push(element item)
{
if(is_full())
{
fprintf(stderr, "stack full error\n");
return ;
}
else stack[++top] = item;
}
element pop()
{
if(is_empty())
{
fprintf(stderr, "stack empty error\n");
exit(1);
}
else return stack[top--];
}
element peek()
{
if(is_empty())
{
fprintf(stderr, "stack empty error\n");
exit(1);
}
else return stack[top];
}
int main(void)
{
int i;
int countA = 0, countB = 0;
char str[MAX_SIZE];
printf("압축할 문자열을 입력하시오: ");
scanf("%s",str);
for(i = 0; str[i] != NULL; i++)
{
push(str[i]);
if(peek()=='a') {
countA++;
}
else if(peek()=='b') {
countB++;
}
}
printf("압축된 문자열: %da%db\n", countA, countB);
}
출력 결과
이번 시간에는 간단한 문자열 압축을 실습했는데요.
예전에 과제로 했었던 기억이 있는데 공부하는데 참고 정도로 해주세요!
작성하고 나니 앞뒷 문자열을 비교해서 출력하는 게 나아 보이네요.
나중에 기회가 되면 알고리즘을 수정해야겠어요.
고생하셨습니다!
반응형
'Programming > C, C++' 카테고리의 다른 글
[C/C++] C언어 Deque 덱을 이용해 문자열을 입력받아 회문 판별하기 (0) | 2021.04.23 |
---|---|
[C/C++] C언어 문자열을 입력받아 회문 판별하기(공백 제거) (0) | 2021.04.23 |
[C/C++] C 언어 동적 메모리 할당을 이용해 구구단 출력 (0) | 2021.04.21 |
@__Evening :: Good Evening
클라우드, 개발, 자격증, 취업 정보 등 IT 정보 공간
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!