[LeetCode#130] Surrounded Regions
·
Algorithm/문제풀이
❐ Description날짜2024.12.13 (금)레벨Medium링크https://leetcode.com/problems/surrounded-regions/description알고리즘 & 자료구조DFS, Queue시간 복잡도O(n•m)      ❐ Approach 1해당 좌표를 방문한 이력이 없고, Land(O)인 부분 부터 탐색을 시작한다.동서남북 방향으로 DFS를 실행한다.현재 위치를 WALL(X)로 변경한다.Queue에 현재 위치를 담는다.현재 위치를 방문 처리한다. ➔ 순회를 최적화하기 위함.동서남북이 WALL(X)로 둘러 쌓여 있지 않은 경우Queue에 있는 모든 좌표를 Land(O) 표시로 변경한다.public void solve(char[][] board) { int maxRow = ..
우테코 7기 프리코스
·
우테코 7기
❐ What I did1. 4주간 매주 주어지는 과제 성실히 제출 및 블로깅과제 모음 list블로그 포스팅 list 2. 단순 과제 제출을 넘어 호기심 해소를 위한 다양한 시도 패키지 내에서 Front, Back 사이드를 나누어 개발구조 정리 블로그 링크소스 코드 링크 책임 연쇄 패턴을 적용하여 사용자 입력값 검증소스 코드 링크 입력값을 처리하는 클래스를 Bill Pugh 패턴을 사용해서 싱글톤으로 관리 소스코드 링크 사용자 입력값을 애노테이션 기반으로 MockkingMockking 개발 과정 포스팅 소스코드 링크  3. 가독성 높은 코드 작성을 위해 "좋은 코드, 나쁜 코드" 스터디 진행Study Repo : https://github.com/joconaco-study/read-joconaco   4...
[비선형] 균형 이진 탐색 트리
·
CS/Data Structure
❐ Description`이진 탐색 트리`가최악의 경우 선형이 되는 것을 방지하고 스스로 균형을 잡는 [균형 이진 탐색 트리]인AVL과 RBT에 대해서 간단하게 정리해보자.     ❐ AVL (Adelson - Velsky and Landis tree)1. AVL 트리는 무엇일까AVL 트리는 BST의 한 종류로, 모든 노드에서 균형 조건을 유지하도록 설계된 [자기 균형 이진 탐색 트리]다. 2. 특징모든 노드에서 왼쪽 서브트리와 오른쪽 서브트리의 높이 차이(균형 팩터)가 -1, 0, 1 중 하나여야 한다.삽입 또는 삭제 시 트리가 균형을 잃게 되면, 특정 회전(rotate) 연산을 수행한다.따라서 삽입과 삭제 연산 후에도 항상 균형을 유지한다. 탐색, 삽입, 삭제 연산 모두 O(log n) 시간 복잡도를..
MySQL 8.0.12 이후의 Spatial Index
·
Back-End/SQL
❐ Description과거 회사에서 MySQL 5.7을 사용해서 Explain Analyze를 사용할 수 없다.그래서 docker mysql 버전을 8.4.3으로 업그레이드 해줬는데, 여기서 예기치 않은 오류를 만나게됐다.     ❐ 문제쿼리 분석을 Explain Analyze 사용을 위해 도커 MySQL 버전을 5.7 ➡️ 8.4로 변경해주었다.기존에는 문제없던 인덱스 생성에서 다음과 같이, Too many key parts specified; max 1 parts allowed 라는경고가 발생했으며, 결과적으로 인덱스 생성이 정상적으로 이루어지지 않았다.     ❐ 변경사항MySQL 8.0.12 이후에는 Spatial Indexes 관해서 아래와 같은 조건이 추가되었다. 1. SPATIAL 키워드는..
실행계획 유형을 알아보자
·
Back-End/SQL
❐ Description쿼리를 작성할 때 `EXPLAIN` 키워드를 작성하면 쿼리 실행계획을 확인할 수 있다.이를 가지고 실무에서 쿼리 개선할 때 종종 사용하곤 했는데, 리마인드 겸 정리해보려고 한다.     ❐ Type 컬럼1. System테이블에 데이터가 없거나 한 개만 있는 경우   2. Const조회되는 데이터가 단 1건인 경우로, 성능상 매우 유리한 방식이다. Unique Index나 PK를 사용하여 단 1건의데이터에만 접근하면 되므로 속도나 리소스 사용 측면에서 지양해야 할 타입이다.  3. eq_ref조인이 수행될 때 드리브 테이블의 데이터에 접근하며 고유 인덱스 또는 기본 키로 단 1건의 데이터를 조회하는경우 확인할 수 있다. 드라이빙 테이블과의 조인 키가 드리븐 테이블에 유일하므로 조인이..
ReadMe.md
·
Back-End/SQL
❐ Description과거 실무에서 프로젝트를 할 때 slow query를 개선해 본 경험이 있다.그 당시에는 구글링과 책들을 참고해서 했었는데, 이번에 한 번 블로그에 정리해볼까 한다.
6-3. Repository
·
Architecture/DDD
❐ Description도메인 주도 설계의 목표는 기술보다는 도메인에 대한 모델에 집중해 더 나은 소프트웨어를 만드는 것"에릭 에반스 - 도메인 주도 설계" 6장의 Repository 내용 정리.여기서 만든 예제는 스스로 이해를 돕기 위해 만든 간단한 예제.저장된 객체를 가져오는 것은 실제로는 생성의 한 부분집합Entity의 생명주기 가운데 중간 단계에 불과     ❐ 필요한 데이터를 직접 획득해서 조작하면 안된다.우선 여기서 가장 중요하게 설명하는 것은 아래와 같다. 클라이언트 코드에서 직접적으로 데이터베이스를 사용해서 Aggregate나 캡슐화와 같은특징을 활용하는 것을 우회하려고 하고, 그 대신 필요한 데이터를 직접 획득해서 조작하면 안된다. 아래와 같이 하지말라는 것이다.// 클라이언트 코드pub..
6-2. Factory
·
Architecture/DDD
❐ Description"에릭 에반스 - 도메인 주도 설계" 6장의 Factory 내용 정리.여기서 만든 예제는 스스로 이해를 돕기 위해 만든 간단한 예제.     ❐ Factory와 Factory의 위치 선정1. Aggregate 내부 Factory MethodAggregate의 루트 엔티티에 팩토리 메서드를 배치하면, Aggregate의 무결성을 보장하는 책임을 루트가담당하게 된다.public class PurchaseOrder { private final String orderId; private final List items; // 생성자 생략 // ... // FACTORY METHOD: PurchaseItem을 생성하고 Aggregate에 추가 p..