본문 바로가기
반응형

삼성 SW 역량174

간단한 윤곽선 검출로 정사각형 찾기 (Find Squares with Simple Edge Detection) 삼성 C형 전체 링크 에지 디텍션은 영상의 밝기의 변화를 검출하여 윤곽선을 찾는 방법이다. 여기서는 간단히 2차원 배열에 겹쳐져 있는 정사각형을 검출해보자. makeRectangle 함수는 좌표 (sr, sc) ~ (er, ec)의 사각형을 모두 1로 증가시키는 함수다. #define MAX (20) int originalMap[MAX][MAX]; void makeRectangle(int sr, int sc, int er, int ec) { for (int r = sr; r < er; r++) for (int c = sc; c < ec; c++) originalMap[r][c]++; } 여기서 만들 정사각형의 최소 사이즈는 4라고 가정한다. makeRectangle(5, 5, 10, 10); // 길이가.. 2023. 8. 14.
메모리 주소를 기록하여 배열에 접근하기 삼성 C형 전체 링크 참고 - 포인터의 크기 (Size of Pointer) - 삼성 SW 역량 시험 환경 memoryTest에서 memory[] 없이 memory 배열에 0 ~ 9를 할당해보자. #include void memoryAllocation(char address[], char memory[]) { } void memoryTest(char address[]) { } int main() { char address[10] = { 0 }; char memory[100] = { 0 }; for (int i = 0; i < 10; i++) printf("%d ", memory[i]); putchar('\n'); memoryAllocation(address, memory); memoryTest(addre.. 2023. 7. 30.
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.
더블 링크드 리스트 구현 (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.
반응형