본문 바로가기
반응형

알고리즘/[PRO] 삼성 SW 역량 테스트 B형45

BOJ 11279 : 최대 힙 삼성 B형 전체 링크 www.acmicpc.net/problem/11279 우선순위 큐 설명은 링크를 참고하자. 링크를 보면, pop과 push에서 변경해야 할 곳은 총 4군데 이다. int pop(int* heap, int& hn) { ... heap[hn--] = 0x7fff0000; for (register int i = 1; i * 2 1; i /= 2) { if (heap[i / 2] heap[i * 2 + 1]) break; else if (heap[i * 2] > heap[i * 2 + 1]) { tmp = heap[i * 2]; heap[i * 2] = heap[i]; heap[i] = tmp; i = i * 2; } else { tmp = heap[i * 2 + 1]; heap[i * 2.. 2021. 2. 21.
BOJ 1927 : 최소 힙 삼성 B형 전체 링크 www.acmicpc.net/problem/1927 우선순위 큐 설명은 링크를 참고하자. #include int N; int heap[100100]; int hn; int pop(int* heap, int& hn) { register int tmp, ret; ret = heap[1]; heap[1] = heap[hn]; heap[hn--] = 0x7fff0000; for (register int i = 1; i * 2 1; i /= 2) { if (heap[i / 2] = 1; i /= 2) 최소 힙이지만, x가 자연수라는 조건에 의해서 얼떨결에 통과하게 되는 것이므로, i > 1이란 것을 잘 기억해두자. i = 1인 경우 부모 node가 없으므로, i > 1까지만 갱신하면 된다. 2021. 2. 21.
B형 필수 : 우선순위 큐 Priority Queue 삼성 B형 전체 링크 참고 - 우선순위 큐 Priority Queue - 우선순위 큐 응용 (1) - 두 개의 heap을 이용하여 중앙값 찾기 - 우선순위 큐 응용 (2) - 최댓값, 최솟값 동시에 관리하기 - 우선순위 큐 임의 원소 삭제 - 우선순위 큐 임의 원소 삭제 최적화 - 우선순위 큐 임의 원소 갱신, 변경 B형에서 Merge Sort는 마지막에 이분 탐색을 위해 필요한 경우가 많다. 그리고 '무언가'를 push해주고, 그 중 가장 우선순위가 높은 '무언가'를 pop하면서, 순서를 유지하고 싶을 때는 우선순위 큐를 이용해야된다. 요즘 B형에서는 HashTable + 우선순위 큐 모두 사용해야하는 경우가 많으므로, 우선순위 큐에 대해서 익혀보자. 먼저 우선순위 큐 코드를 자유롭게 사용하고 싶으면,.. 2021. 2. 19.
BOJ 7785 : 회사에 있는 사람 (Hash Table + Merge Sort) 삼성 B형 전체 링크 www.acmicpc.net/problem/7785 이름을 입력받으면, 아래의 DB 배열에 저장하고 in = 1로 두자. typedef struct st { char name[6]; int in; }DB; DB에 저장하고 이름을 hashing하여 HashTable에 저장하는데, 이때, DB를 포인터로 가르키도록 하자. typedef struct st2 { DB *db; struct st2 *next; }HASH; 즉, Hash에서 db를 보고 있으므로, 포인터로 접근하여 in = 0으로 바꿀 수 있게 된다. DB 자체는 배열로 유지하되, in을 Hash를 통해 포인터로 값을 바꾼다. input = 'enter'면 Hash 저장 및 in = 1, input = 'leave'면 Hash.. 2021. 2. 18.
삼성 B형 샘플 문제 : 숫자야구게임 (+ Linked List 삭제) 삼성 B형 전체 링크 swexpertacademy.com/main/sst/intro.do SW Expert Academy에서 B형 샘플 문제 숫자야구게임을 풀어보자. B형에서 가끔 출제 되는, 시간보다 함수 호출 횟수를 줄여야 하는 쿼리형 문제이다. 따라서 register나 ++i 같은 최적화를 신경 쓸 필요가 없다. 먼저, 숫자 야구 게임에 대해서 간단히 알아보자. 정답이 1357이고, 9375라고 query를 던지면 result = { strike = 1, ball = 2 }가 된다. 위치도 같고, 숫자도 같은 3 → strike 1, 위치는 다르지만, 숫자는 같은 5, 7 → ball = 2 가 된다. guess 배열에 [1, 3, 5, 7]을 담아주면 tc 1개가 패스가 되고, 적은 query로 .. 2021. 2. 17.
BOJ 1764 : 듣보잡 (Hash Table + Merge Sort) 삼성 B형 전체 링크 www.acmicpc.net/problem/1764 듣도 못한 사람의 수 N명, 보도 못한 사람의 수 M명 중 두 명단에 모두 포함되는 사람의 수를 찾고, 사전순으로 출력해야 한다. 두 명단에 포함 → Hash Table 사전순 출력 → Merge Sort 꼭 이렇게 풀 필요는 없지만, B형 연습을 위해 Hash Table + Merge Sort로 풀어보자. B형에서는 string 라이브러리를 사용할 수 없으므로, strcmp와 strcpy는 직접 만들어야 된다. (가끔 코드로 제공) void mystrcpy(char *a, char *b) { while (*a++ = *b++); } int mystrcmp(const char *a, const char *b) { while (*a .. 2021. 2. 17.
B형 필수 정렬 : 머지 소트 Merge Sort 삼성 B형 전체 링크 B형에서는 Quick 정렬을 Reference 코드로 제공한다. 하지만, Quick은 최악의 경우 O(N2)이므로, 어떤 상황에서도 O(NlogN)인 Merge Sort를 익혀두자. Merge Sort는 반으로 나누어서, 왼쪽을 정렬하고, 오른쪽을 정렬한 후, 합치는 방법으로 정렬을 한다. 왼쪽을 정렬할 때는, 다시 반으로 나누어서, 왼쪽, 오른쪽 정렬하고 합친다. 오른쪽도 마찬가지로 ... 즉, 재귀 함수를 이용해서 정렬하게 된다. start >= end면 더 이상 정렬할 수 없으므로 종료 조건으로 사용한다. void sort(int start, int end) { int mid; if (start >= end) return; mid = (start + end) >> 1; /* 절.. 2021. 2. 16.
해시 테이블 성능 비교 및 소수 찾기 (BOJ 1620) 삼성 B형 전체 링크 참고 - 해시 테이블 Hash Table - 해시 테이블 추가, 삭제, 수정, 검색 - 해시 응용 - 2차원 배열 탐색 - 해시 응용 - Rush Hour Puzzle (2차원 배열 탐색 응용) - 해시 테이블 성능 비교 BOJ 1620의 MAX_TABLE을 바꿔가면서 성능을 비교해보자. BOJ 1620의 N = 100,000이다. 순서대로 MAX_TABLE = 100 (작은 값이고 소수가 아님) MAX_TABLE = 107 (작은 값이고 소수) MAX_TABLE = 100,000 (N과 비슷한 값이지만 소수가 아님) MAX_TABLE = 100,003 (N과 비슷한 값이지만 소수) MAX_TABLE = 200,000 (N의 2배, 소수가 아님) MAX_TABLE = 200,009 .. 2021. 2. 16.
BOJ 1620 : 나는야 포켓몬 마스터 이다솜 (Hash Table) 삼성 B형 전체 링크 www.acmicpc.net/problem/1620 참고 - 해시 테이블 Hash Table - 해시 테이블 추가, 삭제, 수정, 검색 - 해시 응용 - 2차원 배열 탐색 - 해시 응용 - Rush Hour Puzzle (2차원 배열 탐색 응용) - 해시 테이블 성능 비교 BOJ 1620은 실제 삼성 B형에서도 자주 나오는 문자열 해싱과 비슷해서 Hash Table 연습 문제로 풀이를 만들어 보았다. 실제 B형에서 제공하는 hashing 함수를 이용해서 문제를 풀어보자. unsigned long hash(const char *str) { unsigned long hash = 5381; int c; while (c = *str++) { hash = (((hash 숫자 */ POKETM.. 2021. 2. 16.
반응형