본문 바로가기
반응형

알고리즘/[EXP] 삼성 SW 역량 테스트 C형25

더블 링크드 리스트 구현 (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.
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.
BOJ 15688 : 수 정렬하기 5 with In-Place Sort 알고리즘 문제 전체 링크 삼성 C형 전체 링크 https://www.acmicpc.net/problem/15688 참고 - BOJ 2751 : 수 정렬하기 2 with 계수 정렬 (Counting Sort) 만약 배열 a의 크기가 매우 크지만 원소의 종류는 매우 적다면, count와 countSum의 배열의 크기는 작아진다. 따라서 이 경우에는 a의 원소의 종류만큼만 필요하게 되고 추가적인 메모리가 거의 없이 in-place 처럼 sorting이 가능하다. 이상적인 In Place 정렬은 다음과 같다. 함수 스택에서 약간의 메모리만 사용할 뿐 추가적인 메모리 없이 a[]에서 서로 교환한다. void inPlaceSort(int a[], int size) { int count[MAX + 10] = { 0 .. 2023. 7. 29.
중위 표기식 직접 연산하기 삼성 C형 전체 링크 참고 - 후위 표기식 - 괄호가 있는 중위 표기식 연산하기 괄호가 없는 경우, 아래의 순서대로 연산하면 중위 표기식을 직접 계산할 수 있다. 1. 숫자를 만나면 현재 숫자(cur)를 저장해둔다. 2. +, - 연산자가 나오면 temp에 현재의 숫자를 곱한다. (temp는 1로 초기화) 3. 그리고 result에 temp를 더한다. 4. *, / 가 나오면 temp에 값을 누적한다. 5. 이후 +, - 연산자가 나오면 2 ~ 3을 실행한다. 6. 모두 종료 후 남은 연산 실행 아래의 식으로 중위 표기식을 연산해보자. operator는 *나 /를 만난 후 저장할 연산자이며, 초기화는 * 로 한다. temp는 1로 초기화하고 - 를 만나게 되면 -1로 초기화한다. 첫 숫자 a를 cur에 .. 2023. 7. 29.
괄호가 있는 중위 표기식 연산하기 삼성 C형 전체 링크 참고 - 스택 - 괄호 - Brainf**k 인터프리터 - 후위 표기식 - 중위 표기식 연산하기 중위 표기법 연산은 아래와 같다. 1. 숫자를 만나면 현재 숫자(cur)를 저장해둔다. 2. +, - 연산자가 나오면 temp에 현재의 숫자를 곱한다. (temp는 1로 초기화) 3. 그리고 result에 temp를 더한다. 4. *, / 가 나오면 temp에 값을 누적한다. 5. 이후 +, - 연산자가 나오면 2 ~ 3을 실행한다. 6. 모두 종료 후 남은 연산 실행 이때 괄호를 만나면 닫힌 괄호까지를 먼저 계산하고 temp로 변경한다. 그리고 괄호 연산이 끝난 경우는 다음 연산을 위해 cur = 1로 초기화 해야 한다. 괄호 내에서는 다시 중위 표기식이 될 것이기 때문에 위의 방법을 .. 2023. 7. 29.
포인터의 크기 (Size of Pointer) - 삼성 SW 역량 시험 환경 삼성 C형 전체 링크 보통 visual studio 환경에서 포인터의 크기는 4byte다. 아래의 코드를 확인해보자. #include int main() { putchar('\n'); printf("char : %d\n", sizeof(char)); printf("short : %d\n", sizeof(short)); printf("int : %d\n", sizeof(int)); printf("long int : %d\n", sizeof(long long int)); putchar('\n'); printf("char* : %d\n", sizeof(char*)); printf("short* : %d\n", sizeof(short*)); printf("int* : %d\n", sizeof(int*)); pr.. 2021. 3. 20.
반응형