[Programmers] 게임 맵 최단거리
·
Algorithm/문제풀이
❒ Description제목게임 맵 최단거리링크https://school.programmers.co.kr/learn/courses/30/lessons/1844자료구조/알고리즘Map, Queue / 넓이 우선 탐색(BFS)시간 복잡도 O(row수 * col수)  BFS를 사용해서 해결 할 수 있는 문제이다. 문제의 핵심 포인트는 maps[row][col] 값을 업데이트 해주는 부분이다.시간 복잡도의 경우는 모든 노드를 한 번씩 방문하기 때문에 O(N*M)의 시간 복잡도를 갖는다.     ❒ Solution더보기import java.util.LinkedList;import java.util.Queue;class Solution { private final int[][] dirs = {{-1, 0}, {..
README.MD
·
DevOps/AWS
❒ Description항상 회사에서 AWS를 사용하고 있어서 따라 쓰기만 했다. 시간이 있을 때 AWS를 제대로 학습하고,다음 회사에서는 알고 제대로 써보고 싶어서 공부를 시작한다. 공부는 AWS 교과서를 통해서 진행할 것이다. 이 책이 매 챕터마다 실습까지 하는 커리큘럼이라 처음 입문하는 나에게 적합한 책으로 판단했다. 지금이 9월11일이니깐 늦어도 10월 말, 11월 초에는 이 책을 마무리할 예정이다.
[LeetCode#787] Cheapest Flights Within K Stops
·
Algorithm/문제풀이
❒ Description제목Cheapest Flights Within K Stops링크https://leetcode.com/problems/cheapest-flights-within-k-stops/description/자료구조비선형 (그래프) - 최단거리시간 복잡도O(ElogV)다익스트라 알고리즘을 사용해서 풀 수 있는 문제이며, Comparable 인터페이스도 활용할 수 있다.이 문제는 경유 횟수가 제한되어 있어서 굉장히 까다로웠다.     ❒ Solution1.  단순 solvepublic int findCheapestPrice(int n, int[][] flights, int src, int dst, int k) { //1. filghts 배열을 통해 graph 생성 List> graph..
Dijkstra 알고리즘
·
Algorithm/내용 정리
❒ Description743. Network Delay Time 문제를 풀면서 Dijkstra 알고리즘을 복습했다. 이 알고리즘은 한 정점에서 모든 정점까지의 최단거리를 구하는 알고리즘이다.  풀이방법은 총 3가지 였다.배열 내에서 선형탐색 + 배열 내에 중복 정점 허용하지 않음우선순위큐 내에서 최솟값 탐색 + 우선순위큐 내에 중복 정점 허용하지 않음우선순위큐 내에서 최솟값 탐색 + 우선순위큐 내에 중복 정점 허용  ※ 참고나무위키(다익스트라 알고리즘)을 보면 잘 정리되어 있어서 별도로 정리하지 않음. 소스 코드 : 링크  관련 문제743. Network Delay Time787. Cheapest Flights Within K Stops778. Swim in Rising Water815. Bus Rou..
Multi module 설정하기
·
Back-End/SpringBoot
❒ Description새로운 토이 프로젝트는 multi module 구조로 시작해봤다. 이 포스팅에서는 multi module을 설정하고,프로젝트에 기본적으로 필요한 dependency들을 설정하는 방법과 과정에서 마주쳤던 issue들을 어떻게해결했는지 정리하려고 한다. 그리고 이번 gilboard 프로젝트에 사용되는 기술들의 버전 정보는 다음과 같다.Java21Spring boot3.3.3Gradle8.10Querydsl5.0.0mysql-connector8.0.33hibernate-spatial6.3.1.Final     ❒ Add Modulesmodule을 등록하는 것은 간단하다. 모듈이 추가되면 build.gradle.kts 파일과 src, gradle 디렉토리를 제외하고 제거해준다.그리고 ro..
B-tree와 DB 인덱스(index)
·
CS/Database
❒ DescriptionDB 인덱스는 B-tree 자료구조를 사용한다. (참고로 MySQL은 B+tree)B-tree와 조회,삽입,삭제의 시간복잡도가 동일한 다른 self-balancing BST인 AVL, Red-Black tree도 있는데왜 B-tree를 쓰는지 알고는 있지만 개념을 정리해보자.     ❒ 메모리 계층우선 DB가 어디서 데이터를 퍼올리는지 이해해야 한다.위 이미지는 메모리 계층을 나타낸 것이다. 위로 올라갈 수록 속도는 빨라지지만 용량은 작아진다. 우리가 DB에저장하는 데이터는 가장 하위에 위치한 보조 기억 장치에 저장된다. 보조 기억 장치와 주 기억 장치 사이의 데이터전송 단위를 Block이라고 하는데, 딱 원하는 데이터만 읽어 오는 것은 아니고 한 block 단위로 데이터를 읽어온..
Git Rebase
·
DevOps/Git
❒ Description회사에서 일하다가 중간에 집에서 이어서 일해야할 때 종종 사용했었다. # 회사에서 작업 (커밋 2개) git commit -m "Entity 작업" git commit -m "API 개발 (WIP)" # 집에서 작업 git commit -m "new API (DONE)" # rebase git rebase -i HEAD~3 git push ~ 오늘은 git rebase에 대해서 알고 있는 부분을 정리해보자. 면접 때 물어 볼 수도 있느니! ❒ Rebase vs Mergerebase와 merge 모두 한 브랜치에서 다른 브랜치로 변경 사항을 통합하도록 설계됐다는 공통점이 있다. 하지만 그 방식에는 차이가 있다. merge는 non-destructive 작업이라는 장점이 있다. 반면에..
FD & Normalization
·
CS/Database
❒ Description정규화(Normalization)는 관계형 데이터베이스의 설계에서 데이터 중복을 줄이고 데이터 무결성을개선하기 위해 데이터 정규형(Normal-form)에 맞도록 구조화하는 프로세스를 뜻한다.1NF ~ 6NF 까지 있는데 보통 3NF까지 만족하면 정규화 됐다라고 한다. 그리고 정규화를 이해하기위해서는 FD(Functional Dependency)를 잘 이해하고 있어야 한다.     ❒ FD (Functional Dependecny)한국어로 함수 종속이라고 하는 Functional Dependency는 데이터베이스의 릴레이션(relation)에서두 개의 애트리뷰트(attribute) 집합 간 제약의 일종이다.  X의 값에 따라 Y 값이 유일하게 결정될 때 X가 Y를 함수적으로 결정한..
위상 정렬(Topological Sorting)
·
Algorithm/내용 정리
❒ DescriptionCourse Schedule 문제를 풀면서 위상 정렬을 사용하는 풀이 방법을 알게 됐다. [ 같이 참고하면 좋은 문제들 ]※ 2024.09.24 추가 : [LeetCode#310] Minimum Height Trees   ❒ DAG (Directed Acyclic Graph)위상 정렬에 대해 공부하기 전 DAG에 대해서 알아보자. 1. 정의유향 비순환 그래프 또는 방향 비순환 그래프는 컴퓨터 과학 분야의 용어로 하나로서, 방향 순환이 없는무한 유향 그래프이다. 이해하기 쉽게 표현하면, 모든 간선들은 방향을 가지고, 어떠한 노드에서 출발해도다시 그 노드로 돌아오는 순환이 존재하지 않는 그래프다. DAG의 특성은 다음과 같다. Directed (유향성)그래프의 각 간선이 방향을 가진다..
[LeetCode#207] Course Schedule
·
Algorithm/문제풀이
❒ Description제목Course Schedule링크https://leetcode.com/problems/course-schedule/description/자료구조비선형 (그래프)시간복잡도위상정렬 : O(v+e) 이번 문제는 재귀로도 풀수 있지만, Topological Sorting 알고리즘을 사용해서도 풀수 있는 문제다.   ❒ Solution1. 재귀 구조public boolean canFinish(int numCourses, int[][] prerequisites) { Map> finishToTakeMap = new HashMap(); for (int[] prerequisite : prerequisites) { finishToTakeMap.putIfAbsent(prere..