본문 바로가기
반응형

삼성 EXPERT60

비트 압축 - 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.
더블 링크드 리스트 구현 (Double Linked List Tail ver) 삼성 C형 전체 링크 참고 - 메모리 풀 Memory Pool - 메모리 풀 vs malloc 속도 비교 - 링크드 리스트 Linked List - 링크드 리스트 Linked List Tail ver - 더블 링크드 리스트 Double Linked List - 더블 링크드 리스트 Double Linked List Tail ver 더블 링크드 리스트에 TAIL이 추가되면 구현이 편하고 성능도 나아진다. HEAD의 next에 TAIL을 연결하고 TAIL의 prev에 HEAD를 연결하자. (초기화) HEAD.next = &TAIL; TAIL.prev = &HEAD; TAIL이 존재하기 때문에 curNode->next가 NULL이 되지 않는다. 따라서 if문이 삭제된다. nd->prev = curNode; nd.. 2023. 7. 30.
더블 링크드 리스트 구현 (Double Linked List) 삼성 C형 전체 링크 참고 - 메모리 풀 Memory Pool - 메모리 풀 vs malloc 속도 비교 - 링크드 리스트 Linked List - 링크드 리스트 Linked List Tail ver - 더블 링크드 리스트 Double Linked List - 더블 링크드 리스트 Double Linked List Tail ver 더블 링크드 리스트를 이용하여 도중에 삽입이 가능한 2차원 배열을 구현해보자. 편의상 index는 1부터 시작한다고 가정하자. 삽입 insert - index 1, hello insert - index 2, c++ insert - index 2, world! ㄴ 위 명령어를 실행하면 아래와 같이 저장된다. hello world! c++ 첫 번재에 hello를 추가하고 두 번째에 .. 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.
BOJ 2338 : 긴자리 계산 알고리즘 문제 전체 링크 삼성 C형 전체 링크 https://www.acmicpc.net/problem/2338 참고 - BOJ 10757 : 큰 수 A+B - BOJ 10757 : 큰 수 A+B with 10^N진법 - BOJ 2338 : 긴자리 계산 - BOJ 2338 : 긴자리 계산 with 10^N진법 - 36진법 긴자리 두 수의 곱셈 - 36진법 긴자리 두 수의 곱셈 with 36^5진법 - 36진법 긴자리 두 수의 곱셈 with 36^5진법 + Fast Input 부호가 포함된 A, B의 덧셈, 뺄셈, 곱셈을 해보자. 10진수로 1,000자리가 주어지며, 곱셈 연산에 의해 최대 자릿수는 2,000이다. 큰 수의 정의 큰 수를 정의하기 위해 char 배열, 문자열의 길이, 그리고 부호를 가지는 .. 2023. 7. 29.
BOJ 10757 : 큰 수 A+B with 10^N진법 알고리즘 문제 전체 링크 삼성 C형 전체 링크 https://www.acmicpc.net/problem/10757 참고 - BOJ 10757 : 큰 수 A+B - BOJ 10757 : 큰 수 A+B with 10^N진법 - BOJ 2338 : 긴자리 계산 - BOJ 2338 : 긴자리 계산 with 10^N진법 - 36진법 긴자리 두 수의 곱셈 - 36진법 긴자리 두 수의 곱셈 with 36^5진법 - 36진법 긴자리 두 수의 곱셈 with 36^5진법 + Fast Input 큰 수 A+B에서 아래의 방법으로 큰 수를 계산했었다. - int로 변경한 후, 뒤집고, 다시 뒤집은 후, char로 변경하기 이 방법을 확장하면 더 빠르게 연산이 가능하다. 매번 배열을 한 칸씩 계산하는 것 보다 배열 한 개에 최.. 2023. 7. 29.
반응형