본문 바로가기

C

(101)
c++ in-place merge sort O(n) 간단한 구현 { 1,3,5,8,0,0,0,0 } 같은 배열이 있을 때 { 1,2,3,4 } > 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #include #include void merge_sort(std::vector& nums1, int m, std::vector& nums2, int n) { int idx0 = m - 1; int idx1 = (int)nums2.size() - 1; int idx2 = n - 1; if (idx2 = 0)) { if (nums1[..
c++ leet code medium Color sort problem color sort는 std::vector nums = {1,0,0,1,1,2,0,1,2,2,0,1,2,0,1}; 과 같은 배열을 {0,0,0,0,0,1,1,1,1,1,1,2,2,2,2}와 같이 분할한다. O(n)이 복잡도로 한번 풀어본다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #include #include void color_sort(std::vector& nums) { int idx0 = 0; int idx1 = 0; int idx2 = (int)nums.size()-1;..
c++ quick sort 구현 코드 quick sort는 정렬을 평균적으로 O(n*logn)의 시간복잡도로 수행 가능하다. 최악의 경우는 O(n^2)이다. quick sort의 정렬이 최악이 되는 경우는 pivot이 계속 인덱스의 끝에 위치하는 경우이다. 하지만 구현하기 쉬우면서, 평균적으로 O(nlogn)이기 때문에 괜찮다. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 #include #include void quick_sort(int star..
c++ PS Find pivot Index, Find minimum subarray with O(n) Brute force를 사용하면 쉽게 해결할 수 있으나 O(n)으로 해결하도록 하자. 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 #include #include #include // 문제 1.Find Pivot Index // [1,8,2,9,2,3,6] (1+8+2 == 2+3+6) 9가 Pivot! // [2,5,7] 피봇이 없음 -> -1 Return하기 // O(n)에 계산할..
c++ 코딩테스트 array에서 0을 뒤로 보내기(Move zeros) 문제 {1,3,0,0,0,4,0,5}를 {1,3,4,5,0,0,0,0}으로 변환하라 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #include #include #include #include // 0 움직이기 // [1,3,4,0,0,4,0,5] void swap(int& a, int& b) { int tmp = a; a = b; b = tmp; } // Swap void moveZeroes(std::vector& nums) { int zIdx ..
c++ vector를 활용한 binary search 정렬된 벡터에서의 binary search를 적용하라 Binary search의 Time complexity는 O(logn)이다. 코드>> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #include #include #include #include // binary search : O(Logn) // 정렬된 데이터에서 binary search를 적용하라 int search(std::vector nums, int target) { int left = 0; int right = (int)nums.size() - 1; int pivot; wh..
c++ stable sort, unstable sort stable sort : merge sort unstable sort : quick, heap sort 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #include #include #include #include // stable sort : merge // unstable sort : quick, heap struct Employee { int age; char name; }; bool operator quick, heap std::array nums = { 0,1,..
c++ 클래스, fstream(파일인풋), stringstream(스트링인풋) 코드 >> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include #include #include #include class Cat { public: Cat(std::string name, int age) : mName{ std::move(name) }, mAge{ age } {}; void print(std::ostream & os) { os