전체 글(117)
-
[자료구조] Linked-List(C 구현)
Linked List연결 리스트는 각 노드가 선형적으로 연결되어 있는 자료구조를 말한다.특징맨 처음 삽입한 노드의 주소를 가진다.각각의 노드는 데이터와 다음 노드의 주소를 가진다.데이터가 추가될 때마다 새로운 노드를 할당한다. -> 노드끼리의 메모리는 불연속적이다.요소의 삭제와 추가는 O(1)이며, 특정 원소 접근은 n이다.장점동적인 크기의 데이터를 다루기 좋다. 데이터를 삽입할 때마다 메모리를 추가로 할당하기 때문이다.일반 배열은 크기를 늘릴 수 없음동적배열(vector) 은 크기가 늘어날 때 재할당과 복사로 오버헤드 발생 O(n)각 요소 사이에 데이터를 추가하더라도 O(1)로 굉장히 빠르다.일반 배열과 동적배열은 해당 구역의 뒷부분을 한 칸씩 밀어서 공간을 만들어 내며 오버헤드가 발생 O(n)단점각 ..
2025.04.19 -
[정렬] Quick sort
Quick sort일정한 기준(pivot)에 따라서 큰 값과 작은 값으로 나누는 것의 반복으로 정렬.시간 복잡도는 nlogn이다. 하지만 최악의 경우 (pivot이 가장 크거나 작다면) n^2이 되어버린다.구현보통은 재귀를 이용하여 구현한다.사용자가 설정한 특정 값을 기준으로 그 값보다 더 큰값과 더 작은 값으로 나누는 과정을 반복한다.이때, 특정한 값의 경우는 사용자의 맘. -> 보통은 가장 왼쪽의 값으로 한다.1. 초기상태. pivot 값과 store 값 모두 left로 설정. store에서는 pivot보다 작은 값을 가진 idx의 최대값. store번째 까지는 pivot 보다 작은 값. store 이후에는 더 큰값이 들어감.2. left+1, right까지 탐색.3. arr[pivot] > a..
2025.04.16 -
Heap 구현(C)
heap힙은 주어진 데이터들 중에서 특정 기준에 부합하는 '최대' 혹은 '최소'를 빠르게 찾아낼 수 있는 자료구조이다.힙은 완전이진트리 를 기반으로 한다. 완전이진트리란 하나의 부모당 자식이 최대 2개까지만 존재하는 트리중에서 왼쪽부터 차례대로 삽입된 형태를 가진 트리를 말한다.부모노드의 값이 자식노드 보다 클때는 "최대힙" 작은 때에는 "최소힙"이라고 부른다. 힙에서는 "형제노드" 간의 관계는 존재하지 않는다. 오로지 자식노드만을 비교한다.즉, 최대힙을 가정했을 때, 트리의 가장 꼭대기 층에 있는 추트노의 값이 트리에 존재하는 값들 중 가장 큰 값이다.힙의 장점기본적인 정렬은 nlogn이다. 따라서 전체 어레이값들에 대해서 작은 값부터 하나씩 가져온다면, nlogn이 필요하다. 힙을 사용하다해도 삽입에..
2025.04.15 -
Python 코딩테스트
문자열 뒤집기print(string[::-1])중복제거print(list(set(tmp)))zip 함수for n1, n2 in zip(tm1, tm2): print(n1, n2)dict 정렬dic = {'a' : 3, 'b' : 1, 'c' : 5}sorted(dic) # key로 sortsorted(dic.item(), key = lambda x: x[1])sorted(dic.item(), key = lambda x: (x[1], x[0]))2차원배열에서 열 추출a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]b = list(zip(*a))[0]깊은 복사import copycopied = copy.deepcopy(ori)실수 표현 정확도 한계a = 0.3 + 0.5if a == ..
2024.10.04 -
RabbitMQ
RabbitMQ란?AMQP(Advanced Message Queuing Protocol)를 구현하여 메세지 생성자와 소비자 사이에서 메세지를 중계해주는 메세지 브로커 이다.AMQP는 메세지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜메세지 지향 미들웨어는 비동기 메세지를 사용하는 응용프로그램들 사이에서 데이터를 송수신 하는 것을 의미. 이러한 시스템을 구현한 솔루션을 메세지 큐 라고 한다.메세지 큐를 사용하는 이유 비동기메세지 큐의 경우 생산된 메세지의 저장, 전송에 대해 동기화 처리 하지 않고 Queue에 넣어두기 때문에 나중에 처리가 가능하다. 이로 인해 병목현상을 방지할 수 있음낮은 결합도Producer와 Consumer가 독립적으로 행동하면서 서비스 간의 결합도가 낮아진다. 확장성다수의 ..
2024.08.23 -
LGBM
GBM이란?Boosting약한 모델을 여러 번 순차적으로 적용해 강한 모델을 만들어 나가는 것을 의미한다. 즉 이전 학습기가 잘못한 예측한 데이터를 다음 학습기가 학습함으로써 순차적으로 예측 정확도를 높여가는 방식Gradient Decentloss 함수의 미분값의 크기가 점차 줄어드는 방향으로 가중치를 업데이트하여 손실함수의 최소값을 찾가는 방법을 말한다.쉽게 말해, Gradient에 마이너스를 취해 가중치를 업데이트 하는 방법.GBM 예시성별과 키로 몸무게를 예측하는 회귀 문제초기모델 : 모든 데이터의 샘플을 몸무게의 편균인 55로 예측첫번째 학습기학습 : 잔차(실제 몸무게 - 초기예측값) 를 이용해 학습. 이를 이용해 MSE(평균제곱오차)가 최소가 되는 값을 분기점으로 택한다.결과 : 잔차가 가장 줄..
2024.08.23