본문 바로가기
반응형

bit21

비트 압축 - 허프만 알고리즘 (Simple Huffman Coding Algorithm) 삼성 C형 전체 링크 참고 - 카드 섞기 알고리즘 - 비트 단위로 출력하기 - 33% 압축하기 - 37.5% 압축하기 1 (8bit : 5bit) - 37.5% 압축하기 2 (16bit : 10bit ~) - 허프만 알고리즘 320개의 'A', 160개의 'B', 80개의 'C', 40개의 'D', 그리고 10개의 'E', 'F', 'G', 'H'가 랜덤으로 분포된 크기 640의 배열이 있다. unsigned char problem[640 + 1] = { 0 }; int cnt = 0; for (int i = 0; i < 320; i++) problem[cnt++] = 'A'; for (int i = 0; i < 160; i++) problem[cnt++] = 'B'; for (int i = 0; i <.. 2023. 9. 2.
타입 캐스팅으로 입력 빨리 받기, 비트 연산으로 메모리 압축하기 삼성 C형 전체 링크 참고 - 비트 단위로 출력하기 - 36진법 긴자리 두 수의 곱셈 with 36^5진법 + Fast Input 카드 4장이 한 세트로 있고 각 카드에 점수가 있다고 가정하자. 카드 : 0 0 0 0 ~ 카드 : 9 9 9 9로 총 10000개의 카드 세트가 존재한다. 그리고 카드 a b c d 의 점수는 abcd (a * 1000 + b * 100 + c * 10 + d)라고 하자. char card[10000][4]; int answer[10000]; void makeCard() { int count = 0; for (int a = 0; a < 10; a++) for (int b = 0; b < 10; b++) for (int c = 0; c < 10; c++) for (int d .. 2023. 8. 26.
C, C++ - 비트 교환 (Change Some Bits) C, C++ 전체 링크 삼성 C형 전체 링크 참고 - 비트 연산 기본 매크로 함수 - 비트 단위로 출력하기 1. char 타입 4bit 교환 2. 4bit 단위로 교환 3. 1bit 교환 char 타입 4bit 교환 char는 1byte = 8bit이므로 아래와 같이 4bit씩 양 옆으로 옮겨주면 비트가 교환된다. 예를 들어 char a = 0xA9라면 0x9A가 된다. typedef unsigned char uc; uc change4Bit(unsigned char value) { return (value > 4); } 전체 코드는 다음과 같다. #include typedef unsigned char uc; uc change4Bit(unsigned char value) { return (value > 4.. 2023. 8. 15.
C, C++ - 비트 뒤집기 (Reverse Bits) C, C++ 전체 링크 삼성 C형 전체 링크 참고 - 비트 단위로 출력하기 - 1 비트 개수 세기 1 비트 개수를 세는 방법을 응용하면 비트를 뒤집는 것도 가능하다. long, int, short, char ver 구현을 참고하자. #include typedef unsigned long long int ll; template void printBitNumber(T number) { unsigned int bitSize = sizeof(number) * 8; T mask = (1ull) = 1; if (i % 8 == 7) printf(" "); } putchar('\n'); } ll getBitConvertLong(ll number) { ll convert = number; convert = (conve.. 2023. 7. 30.
비트 압축 - 37.5% 압축하기 2 (16bit : 10bit ~) 삼성 C형 전체 링크 참고 - 33% 압축하기 - 37.5% 압축하기 1 (8bit : 5bit) - 37.5% 압축하기 2 (16bit : 10bit ~) - 허프만 알고리즘 8비트 압축과 같은 방식으로 short 16bit → 10bit, int 32bit → 20bit, long 64bit → 40bit도 해보자. 이 경우 short에 들어가있는 16bit는 210 = 1024 미만의 수로만 구성되어 있다고 볼 수 있다. short 16 to 10 short를 그림으로 그려보면 다음과 같다. char의 그림을 2배로 늘린 것과 같다. char 압축 코드는 아래와 같았다. void char8to5(unsigned char src[8], unsigned char dest[5]) { printf("src.. 2023. 7. 30.
비트 압축 - 37.5% 압축하기 1 (8bit : 5bit) 삼성 C형 전체 링크 참고 - 33% 압축하기 - 37.5% 압축하기 1 (8bit : 5bit) - 37.5% 압축하기 2 (16bit : 10bit ~) - 허프만 알고리즘 알파벳 'a' ~ 'z'로만 이루어진 문자열이 있다고 가정하자. 여기서는 char 1000 byte를 625 byte로 줄여보자. 즉, 아래의 문제를 풀어보자. #include unsigned char original[1000 + 1]; unsigned char temp[625 + 1]; int mystrcmp(unsigned char *a, unsigned char *b) { while (*a && *a == *b) ++a, ++b; return *a - *b; } void compress(unsigned char* src, u.. 2023. 7. 30.
비트 압축 - 33% 압축하기 삼성 C형 전체 링크 참고 - 33% 압축하기 - 37.5% 압축하기 1 (8bit : 5bit) - 37.5% 압축하기 2 (16bit : 10bit ~) - 허프만 알고리즘 'a' ~ 'z' 까지만 사용되는 문자열이 있는 경우, 이 문자열을 33% 압축해보자. 아래 문제를 PASS 시켜보자. #include unsigned char original[100]; unsigned char temp[67]; int mystrcmp(unsigned char *a, unsigned char *b) { while (*a && *a == *b) ++a, ++b; return *a - *b; } void compress(unsigned char* src, unsigned char* dest) { } void deco.. 2023. 7. 30.
C, C++ - 2차원 비트맵 뒤집기, 회전하기 (Rotate, Flip 2D Bitmap) C, C++ 전체 링크 삼성 C형 전체 링크 참고 - N x N 2차원 배열 뒤집기, 회전하기 (Rotate, Flip 2D Array) 아래의 char 배열은 2차원 배열로 16 x 2의 크기를 가진다. 하지만 비트 단위로 볼 때, char는 1byte이므로 16 x (2 x 8) = (16 x 16)인 정사각형의 비트맵으로 볼 수 있다. char bitmap[16][2]; N x N 2차원의 배열을 뒤집거나 회전하는 것은 간단하지만, 비트 연산의 경우 1 byte를 8개로 나눠서 구현해야 한다. 높이와 너비(x 8)가 같은 2차원 비트맵을 반전시키거나 회전시켜보자. bitmap의 SIZE = HEIGHT와 같다. 하지만 너비 WIDTH는 비트 단위로 계산하기 때문에 HEIGHT를 8로 나눈다. 그렇게.. 2023. 7. 30.
C, C++ - 1차원 비트 회전하기 (Rotate Bits of a Number) C, C++ 전체 링크 삼성 C형 전체 링크 비트를 회전시켜보자. 비트의 회전은 unsigned 타입만 가능하다. 먼저 아래 코드를 실행시켜 보자. #include template void printBitNumber(T number) { unsigned int bitSize = sizeof(number) * 8; T mask = (1ull) = 1; if (i % 8 == 7) printf(" "); } putchar('\n'); } template T getBitRotateLeft(T number, int n) { unsigned int bitSize = sizeof(number) * 8; return (number > (bitSize - n)); } template T getBitRotateRight.. 2023. 7. 30.
반응형