공부/알고리즘 9

MongoDB 시간 groupby 쿼리

회사에서 만드는 서비스중에 MongoDB를 사용하는 서비스가 있다. 시간 관련해서 쿼리를 해야할 일이 있어서 확인을 하다가 좀 이상한 점이 있어 확인을 했다. MongoDB에 New Date() 를 사용해서 저장할 경우 기본적으로 ISODate UTC 기반으로 저장이 되는 것 같다. 서버 시간이 KST임에도 UTC로 저장되는게 기본인 듯 싶다. 일반적으로 Z가 붙으면 UTC 붙지 않으면 KST인데 ISODate로 표시되는 값은 아래와 같이 뒤에 Z가 붙건 붙지 않건 모두 UTC 이다. "createdAt" : ISODate("2024-04-02T15:00:41.737+0000") 이건 한국시간 4월 3일 "createdAt" : ISODate("2024-04-02T14:59:41.737+0000") 이건..

공부/알고리즘 2024.04.04

LL 이진탐색트리

이진탐색트리 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980int bcnt;struct Node { int data; //왼 : 나보다 작은값 //오른 : 나보다 큰값 Node *lch, *rch; Node *alloc(int nd) { data = nd, lch = rch = NULL; return this; }}buf[SIZE]; // 트리에서 data 검색Node* searchNode(Node* now, int tg) { // 데이터 검색되면 리턴 if (now == NULL |..

공부/알고리즘 2020.12.10

정렬(sort) 관련

insertion sort (삽입정렬) - 주로 top N을 구할때 만들어 두고 사용한다. 32개 이하의 갯수일때는 제일 빠르다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // top10을 뽑으려면 12개 정도 여유있게 // 들어간 갯수를 관리하기 위한 변수 int trr[12] = { 0 }, an = 0; int i = 0, j = 0; // 들어간 갯수 뒤에서부터 앞으로 체크 for (i = 0; i = 0; --j) { // 현재 위치와 나를 비교해서 내가 더 좋으면 // 뒷자리로 하나 보내고, 아니면 break; // 내가 들어갈 자리는 j+1자리 (j는 나보다 좋으니까) if (trr[j] > arr[i]) trr[j + 1] = trr[j]; els..

공부/알고리즘 2020.12.09

부분합 문제

Honor's method (특정 진법의 수를 10진법으로 변환) 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 char vect[10]; int result; // a진법을 10진법으로 변환 int honor() { for (int i = 0; vect[i]; ++i) { if (vect[i] >= 'A' && vect[i] 127) result -= 256; } // 10진법을 b진법으로 변환 void reverse_honor() { int temp[100] = { 0 }; int t = 0; while (1) { temp[t++..

공부/알고리즘 2020.12.07

hash key 관련

다양한 hash key 생성법 - 나열된 숫자들의 제곱의 합 (10 8 23 93 21 42 이렇게있을때 멍청하게 다계산하지말고 누적합을 쓴다) - 영문 앞3개의 26승의 합 - 소문자를 ULL로 5비트씩 할당해서 key - bit 처리가 가능한 경우 16bit, 20bit 씩 키로 처리하는것도 가능 같은모양 찾는 해쉬 - 연결된 선 cnt - 좌상, 우하 의 가상 사각형의 x,y - 좌상 4개, 우상, 4개 등의 패턴 (0101, 0011 같은) - 블럭의 왼쪽, 오른쪽, 위, 아래의 블럭여부를 체크해서 (1,2,4,8)을 더해주는 형태로 갯수를 세는 패턴 시험장에서 주는 기본해쉬함수를 응용해도 된다. 12345678910111213141516171819202122232425262728293031323..

공부/알고리즘 2020.12.01

구간트리 (최대, 최소)

구간별 특정값들을 빠르게 계산하는 문제에서 필요함. 구간의 최대값, 커서가 움직이는 상태에서 가까운 위치 구하기 (cd홀더, 앱관리, 공사차량 등) 구간트리 생성, 업데이트, 쿼리 하는 코드 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include const int N = 50;int tree[N * 4], A[N];inline int Max(int a, int b) { return a > b ? a : b; } void build(int now, int s, int e){ if (s == e) { tree[now] = s; /..

공부/알고리즘 2020.12.01

DLL + hash 2개

기본 더블링크드리스트 와 2개 이상의 hash를 연결하는 코드. 이걸 자유자재로 구사해야 한다. 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 #include..

공부/알고리즘 2020.11.28