본문 바로가기

전체 글

(2341)
(Python3) - LeetCode (Hard) : 2290. Minimum Obstacle Removal to Reach Corner https://leetcode.com/problems/minimum-time-to-visit-a-cell-in-a-griddijkstra문제였습니다.📕 풀이방법📔 입력 및 초기화grid 높이 height, 너비 width를 선언 후 적절히 초기화합니다.📔 풀이과정특정 r행 c열에 도착할 때의 시간이 가변적이므로 0-1 bfs는 사용이 불가합니다. 따라서 최소의 가중치 중심으로 경로를 먼저 탐색하기 위해 dijkstra함수를 구현해 사용합니다. 1. 방향을 위한 배열 dr, dc와 min heap인 pq, r행 c열에 방문한 시간 checked선언 후 시작점을 넣어주고 check해줍니다. 2. pq에서 현재 방문한 time, r행, c열을 pop해줍니다. 만약 현재 r행 c열이 도착지점이라면 현재 ..
(Spring) - 객체 생명주기 🍳머리말객체 생명주기는 앱의 확장성, 안정성에 중요합니다. 어떻게 관리하는지에 대해 알아봅니다.📕 정의📔  객체프로그램에서 데이터와 데이터를 처리하는 메서드를 하나로 묶은 독립적 단위📔  객체 생명주기란객체가 생성, 초기화, 소멸 되는 전 과정을 의미. Spring에서는 IoC 컨테이너가 객체 생명주기를 관리하며 개발자가 이 과정을 직접 처리하지 않아도 되도록 지원📕 주요 특징📔 객체 생명주기 단계📑 컨테이너 초기화ApplicationContext가 초기화되면서 XML 설정 파일, Java config 클래스, 또는 어노테이션 스캔을 통해 Bean 정보 읽음객체 클래스 의존성 초기화/소멸 메서드 포함📑 생성IoC 컨테이너가 @Component, @Bean 또는 XML에 정의된 bean..
(Python3) - LeetCode (Hard) : 2290. Minimum Obstacle Removal to Reach Corner https://leetcode.com/problems/minimum-obstacle-removal-to-reach-corner/?envType=daily-question&envId=2024-11-280-1 bfs로 풀어본 문제였습니다.📕 풀이방법📔 입력 및 초기화높이 height, 너비 width, 방향 탐색을 위한 배열 dr, dc를 선언 후 적절히 초기화합니다.📔 풀이과정bfs함수를 구현합니다.1. 탐색에 우선순위를 주기 위해 push pop이 상수 시간 복잡도를 가지는 deque변수 dq를 선언 후 사용합니다. 2. 재방문하지 않기 위한 checked배열을 width * height만큼 2차원으로 선언해줍니다. 3. 시작점 0행0열 0번 벽을 부숨을 의미하는 tuple (0,0,0)을 dq에..
(Python3) - LeetCode (Medium) : 2924. Find Champion II https://leetcode.com/problems/shortest-distance-after-road-addition-queries-idijkstra문제였습니다.📕 풀이방법📔 입력 및 초기화1. 인접리스트 형태로 map edges선언 후 key에는 node번호, value에는 현 node에 연결된 node들을 배열로 저장합니다.  2. 각 query별 최소거리 배열 distances 선언 후 빈 배열로 초기화합니다.📔 풀이과정n이 500이므로 O(n^3)의 시간복잡도로 가진 알고리즘은 사용할 수 없습니다. 단순 bfs나 플로이드 와샬을 사용한다면 시간초과가 뜹니다. 따라서 시간복잡도가 O((V+E)log(E))인 dijkstra를 사용해 해결합니다. 1. dijkstra를 구현합니다. 1-1..
(Python3) - LeetCode (Medium) : 2924. Find Champion II https://leetcode.com/problems/find-champion-iigraph(DAG) 문제였습니다.📕 풀이방법📔 입력 및 초기화1. 각 node별 진입하는 노드의 개수 in_degree_count를 선언 후 n-1까지 0으로 채워 초기화합니다. 2. edges를 돌며 e[1]에 진입하는 in_degree_count를 세줍니다. 3. 정답 변수 champion, champion 수 champion_count를 선언 후 각각 -1, 0으로 초기화합니다.📔 풀이과정n-1까지 for loop를 수행하며 다음을 진행합니다.1. 각 node별 진입 노드가 존재여부를 파악합니다. 존재하지 않다면 champion이므로 champion을 현 node로 갱신 후 champion_count를 1더해..
(SQL) - LeetCode (easy) 1967. Number of Strings That Appear as Substrings in Word https://leetcode.com/problems/number-of-strings-that-appear-as-substrings-in-word/description/문자열을 다뤄본 문제였습니다.📕 풀이방법📔 입력 및 초기화정답 변수 answer 선언 후 0으로 초기화합니다.📔 풀이과정patterns의 원소를 순회하며 word에 해당 pattern이 존재한다면 부분 문자열이므로 answer를 1씩 증가시켜줍니다.📔 정답 출력 | 반환answer를 반환합니다.📕 Code📔 Python3class Solution: def numOfStrings(self, patterns: List[str], word: str) -> int: answer = 0 for p in p..
(SQL) - LeetCode (easy) 1975. Maximum Matrix Sum https://leetcode.com/problems/maximum-matrix-sum/description구현 문제였습니다.📕 풀이방법📔 입력 및 초기화행 r, 열 c, 음수의 개수 minus_count, 가장 작은 절댓값 min_abs_num, 원소들의 총 합 sum을 선언 후 적절히 초기화합니다.📔 풀이과정1. matrix의 원소를 순회하며 음수의 개수를 minus_count에 세주고 최소 절댓값은 min_abs_num에 저장합니다.📔 정답 출력 | 반환1. minus_count가 짝수라면: 인접한 부분들을 자유롭게 -1로 곱해 부호를 바꿀 수 있으므로 minus_count가 짝수라면 어떻게든 모든 원소를 양수로 만들 수 있습니다. 즉, 2개의 음수가 멀리 떨어져 있더라도 인접한 원소들을..
(SQL) - LeetCode (easy) 1965. Employees With Missing Information https://leetcode.com/problems/employees-with-missing-information/description/union을 사용해본 문제였습니다.📕 풀이방법📔 풀이과정1. employees에서 salaries를 left join하게되면 salaries에만 있는 employee_id의 경우 사라지게 되며 employees에 있는 id만 남게 됩니다. 해당 id들을 distinct select해 줍니다. 2.  반대로 salaries에서 employees를 left join하게되면  employees에만 있는 employee_id가 사라지며 salaries에 있는 id만 남게 됩니다. 해당 id들을 distinct select해줍니다. 3. 두 id들을 union해서 id에 ..