본문 바로가기

전체 글213

(24.10.07) CAP 이론 정리 분산된 DB 등의 환경에서 이뤄져야하는 속성에 관련하여 정리를 했다.트랜잭션이나, 또는 기본적인 DB 관련 이론에 비해서 개념에 관련된 부분이라처음 들어본 이론이기도 하고,현대 클라우드 기반의 분산 시스템 Distributed System에서 어떻게 활용을 할 수 있을 지 볼 수 있다고 생각해서간단할 수 있지만, 여러 예시를 찾아보기도 하면서 정리했다. CAP 이론분산 시스템에서 3가지 속성(일관성, 가용성, 네트워크 분할 허용성) 중 모두를 동시에 만족할 수 없고, 2가지만을 만족시킬 수 있다는 이론분산 시스템 : 데이터를 저장하는 클라우드 등의 데이터 관리 시스템 등의 환경에릭 A. 브루어 교수가 2000년에 분산 컴퓨팅에 대해서 처음으로 주장일관성 Consistency분할된 모든 노드에서 동일한 데.. 2024. 10. 7.
(24.09.26) 정렬 알고리즘 : Quick Sort, Merge Sort Java에서 이미 Collecions 클래스를 통해서 이미 sort 메서드에서 내부적으로 진행하고 있는 정렬에대해서사실상 코딩 테스트나 실무에서는 크게 중심적으로는 사용하지는 않는 알고리즘이지만, 어떻게 작동이 된는 것인지, 그리고 분할한 뒤에 재귀적인 반복과 통합하는 방식의 정렬로알고리즘에 대해서 인식하고 이러한 방식을 참고해서 로직에서 참고할 수 있기 때문에, 따로 같이 블로그에 공부해서 스스로 코드도 작성하면서 정리퀵 정렬 Quick Sort데이터들을 어떤 기준이 되는 Pivot 데이터를 정해서 그 데이터 기준으로 작으면 왼쪽 크면 뒤로 미루는 분할 시켜 정렬하는 방식을 반복하면서 정렬하는 방식피봇은 대게 첫번째 또는 마지막 인덱스 값으로 선택순서를 보장하지 않고 오로지 정렬만을 하는 방식상대적으로.. 2024. 9. 26.
(24.09.24) 객체 지향 설계 원칙, SOLID 원칙 이력서/자소서 작성과 면접 내용을 체계적으로 Notion에 정리하면서추가적으로 정리하는 내용에 대해서 블로그에 하나씩 더 자세하게 나만의 글로 적고 학습하려고 한다. 객체 지향 프로그래밍을 위해 Java언어와 Spring 프레임워크를 사용하면서,가장 많이 사용한 것이 IoC 제어의 역전과 DI 의존성 주입을 가장 중심적으로 고려하면서 프로젝트를 진행했다. 하지만, 객체지향의 디자인패턴을 다룰 때, SOLID 원칙을 고려한다고만 간단하게 알고 있었지,정확하게 각 원칙을 정리할 필요가 있었기 때문에, 해당 부분을 찾아가고,직접 정리하면서 최대한 기억을 하려고 했다. 간단할 수 있지만, Java  문법을 하면서 익혔던 polymorphism 등의 개념을 정확히 고려한 것을그대로 프로그래밍 구조를 구축을 할때 .. 2024. 9. 24.
(24.09.05) 코딩테스트 알고리즘 정리(유니온 파인드 알고리즘) 유니온 파인드 Union-Find 알고리즘은 코딩테스트 대비에서 거의 출제빈도가 적은 알고리즘으로 알고 있다. 하지만, 지금까지 가중치에 따른 Graphy 구조에서 어떤 "경로" 관해서 집중한 알고리즘이 있다면,이번엔 같은 그룹 즉, 같은 루트에 해당하는 자료에서 특정 주어진 경로의 루트 값의 비교를 통해 같은 그룹인지 아닌지를 파악할 수 있도록 하는 알고리즘을 집중해서 찾아보고 학습을 해봤다. 생각보다 개인적올 이해하기가 살짝 어려워서 코드를 하나하나 쳐가면서 내가 스스로 낸 문제를 작성할 수 있었다.유니온 파인드 Union-Find서로소 집합(Disjoint Set)의 자료구조를 다루는데 사용되는 알고리즘연결된 요소 즉, 그룹을 빠르게 찾아낼 수 있는 알고리즘그룹은 하나의 부모에 여러 요소가 포함되어.. 2024. 9. 5.
(24.09.04) 코딩테스트 알고리즘 정리(동적 계획법 Dynamic Programming / 다익스트라 알고리즘) 개발 이력서/Portfolio 동시에 준비 + 기존 완성 프로젝트 Update/점검 상황에서 매일 알고리즘 학습을 하는게 워낙 어려운 일이 아닌 것 처럼 느껴져서 심리적으로 압박이 크다. 코딩테스트 준비이기도 하지만, 학습하면서, 로직에서 구현되어야할 알고리즘을 배우는 것도 나름 흥미가 있고,학습한 동적 계획법 처럼 어떤 특정 패턴의 알고리즘이 아닌 로직을 구성하는 방법에 관한 것들도실제 코드를 작성하는데 도움이 될 것으로 생각해서 내 언어로 하나하나 정리하면서 학습 동적 계획법 Dynamic Programming하나의 문제를 큰 문제를 여러개의 문제로 쪼개서 결과를 저장 → 다시 해결에 사용하는 방식DFS에서의 재귀방식을 사용할 시, 과하게 많은 로직이 반복이 되거나, 또는 많은 양의 반복문을 계속해서.. 2024. 9. 4.
(24.09.02) 코딩테스트 알고리즘 정리(전체탐색 : BFS/DFS) 코딩테스트에서 많이 사용되는 알고리즘 중 전체탐색을 하는 BFS DFS 전체탐색 알고리즘을 찾아보고 직접 코드를 짜보면서 학습했다. 아래의 모든 내용은 스스로 정리를 한것이고,이해하기 어려웠기 때문에 코드를 직접 주석과 함께 쓰면서 공부를 하면서 정리하는데 시간이 조금 걸렸지만, 전체를 탐색하고 특정 조건이 주어졌을 때, 그 조건을 만족시켜 해당하는 경로(Node)를 탐색시키는 것을 목적으로 둔다는 점에서BFS는 이웃경로 탐색으로 최단거리, 최단 경로 문제DFS는 조건이 걸린 모든 경로 구하기문제 = 미로 문제 를 스스로 내서스스로 알고리즘을 짜면서 학습을 진행을 했다. BFS (Breadth-First Search, 너비 우선 탐색)그래프의 모든 노드를 레벨 단위로 탐색하는 알고리즘따라서 재귀적으로 동.. 2024. 9. 2.
(24.08.28) 코딩테스트 알고리즘 정리(구현:누적합,유클리드,에라토스테네스의체, 구간탐색:이분탐색,슬라이딩윈도우, Greedy:동전교환 알고리즘) 이전까지는 거의 코드 카타를 맨땅에 헤딩하듯이 풀어서다시 살펴보니, 간단하게 알고리즘으로 풀수 있는 로직을 굳이 O(N^2) 시간 복잡도로 하나씩 대조하거나 하는 식의 로직이 많았기 때문에,필수 알고리즘 기초부터 다시 정리를 하기 시작했다. 검색을 통해 정리를 하고, 스스로 코드를 적으면서 정리를 한 뒤, 응용된 문제들을 푸는 방식으로 진행을 해야여러 알고리즘이 섞인 코딩테스트 문제도 해결할 수 있을 것이라고 판단해서 블로그 TIL과 Notion에 정리를 하도록 한다.  누적합 Prefix Sum더보기특정 배열 등의 자료 구조 구간의 누적된 합, 즉 계속 지속적으로 더하는 알고리즘배열의 여러 구간에 대해 부분합을 빠르게 계산“ 이전까지의 누적합을 다음 누적합에 사용한다” 라는 알고리즘이기 때문에 항상 누.. 2024. 8. 28.