전체 글

알고리즘 블로그
· 알고리즘
📌 LeetCode [62]: Unique Paths🔗 문제 링크문제 설명 📄로봇이 (m \times n) 격자의 왼쪽 위에서 오른쪽 아래로 이동하려고 합니다.로봇은 오른쪽 또는 아래쪽으로만 이동할 수 있습니다.격자에서 오른쪽 아래로 가는 데 필요한 고유 경로의 수를 반환하는 문제입니다.문제 접근 방식 📋동적 계획법(DP) 사용:DP 배열 dp[i][j]는 (i, j)까지의 고유 경로 수를 저장합니다.초기화:시작점 (dp[0][0] = 1): 시작점에서의 경로 수는 1입니다.첫 번째 행과 첫 번째 열은 각각 오른쪽/아래로만 이동 가능하므로 (dp[i][0] = 1), (dp[0][j] = 1)로 초기화됩니다.DP 점화식:각 셀 (dp[i][j])는 왼쪽에서 오는 경로와 위쪽에서 오는 경로의 합입니..
· 알고리즘
📌 LeetCode [200]: Number of Islands🔗 문제 링크문제 설명 📄2D 그리드 맵이 주어질 때, '1'(육지)로 연결된 섬의 개수를 반환하는 문제입니다. 섬은 상하좌우로 연결된 '1'들로 구성됩니다. '0'(물)은 육지를 분리합니다.문제 접근 방식 📋BFS를 사용한 탐색:그리드의 모든 셀을 순회하며, 새로운 '1'을 발견할 때마다 BFS를 시작합니다.BFS는 큐를 사용하여 인접한 모든 '1'을 탐색하고, 방문한 셀을 visited에 기록합니다.방문 기록:이미 방문한 셀은 다시 탐색하지 않도록 visited 집합을 사용하여 체크합니다.섬의 개수 계산:새로운 '1'을 발견할 때마다 섬의 개수를 증가시킵니다.Solution 💻from collections import dequec..
· 알고리즘
📌 LeetCode [3]: Longest Substring Without Repeating Characters🔗 문제 링크문제 설명 📄문자열 ( s )가 주어졌을 때, 중복되지 않은 문자로만 이루어진 가장 긴 부분 문자열의 길이를 반환하는 문제입니다.문제 접근 방식 📋슬라이딩 윈도우와 deque 활용:중복 문자가 발견될 때까지 앞쪽 문자들을 제거하며, 중복이 없도록 유지합니다.deque는 현재 윈도우의 문자들을 저장하며, set은 중복 검사를 위해 사용합니다.반복문으로 윈도우 탐색:문자열의 각 문자를 순회하며, 중복이 발생하면 deque의 앞쪽 문자를 제거합니다.매 단계마다 현재 윈도우의 길이를 갱신합니다.최대 길이 반환:탐색이 끝난 후 최대 길이를 반환합니다.Solution 💻from col..
· 알고리즘
📌 LeetCode [206]: Reverse Linked List🔗 문제 링크문제 설명 📄주어진 단일 연결 리스트를 역순으로 뒤집고, 뒤집힌 리스트의 시작 노드를 반환하는 문제입니다.문제 접근 방식 📋포인터 기반 반복 접근:prev를 사용하여 이전 노드를 추적하고, 현재 노드의 next를 이전 노드로 바꿉니다.temp로 다음 노드를 임시 저장하여 연결을 끊어도 순회를 유지합니다.종료 조건:마지막 노드에 도달한 뒤, 역순으로 바뀐 리스트의 시작 노드인 head를 반환합니다.Solution 💻class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: prev = None ..
· 알고리즘
📌 LeetCode [83]: Remove Duplicates from Sorted List🔗 문제 링크문제 설명 📄주어진 정렬된 단일 연결 리스트에서 연속된 중복 노드를 제거하고, 각 값이 하나씩만 나타나는 연결 리스트를 반환하는 문제입니다.예제 입력/출력입력: head = [1, 1, 2]출력: [1, 2]입력: head = [1, 1, 2, 3, 3]출력: [1, 2, 3]제약 조건노드의 개수는 0 입니다.리스트의 값은 -100 이며, 정렬된 상태로 주어집니다.문제 접근 방식 📋정렬된 리스트의 특성 활용:리스트가 정렬되어 있으므로, 현재 노드와 다음 노드의 값만 비교하면 중복 여부를 알 수 있습니다.연속된 중복 노드 제거:현재 노드와 다음 노드의 값이 같으면, 현재 노드의 next를 수정하여..
· 알고리즘
📌 LeetCode [59]: Spiral Matrix II🔗 문제 링크문제 설명 📄정수 ( n )이 주어질 때, ( n \times n ) 크기의 나선형 행렬을 생성하여 반환하는 문제입니다. 행렬은 1부터 ( n^2 )까지의 숫자로 채워집니다.예제 입력/출력입력: ( n = 3 )출력:[[1, 2, 3], [8, 9, 4], [7, 6, 5]]문제 접근 방식 📋2D 행렬 초기화:( n \times n ) 크기의 행렬을 0으로 초기화합니다.나선형으로 값 채우기:top, bottom, left, right 경계를 설정하여 나선형으로 값을 채웁니다.각 방향(오른쪽, 아래, 왼쪽, 위)으로 이동할 때마다 경계를 업데이트합니다.반복문 종료 조건:top > bottom 또는 left > right가 되면 ..
· 알고리즘
📌 LeetCode [54]: Spiral Matrix🔗 문제 링크문제 설명 📄2D 행렬 matrix가 주어질 때, 나선형(spiral) 순서대로 배열의 모든 요소를 반환하는 문제입니다.문제 접근 방식 📋경계 값 관리:top, bottom, left, right 경계를 설정하여 나선형으로 배열을 순회.각 방향(오른쪽, 아래, 왼쪽, 위)으로 이동할 때마다 경계를 업데이트.각 방향으로 반복문 순회:오른쪽: top 경계의 행을 순회.아래: right 경계의 열을 순회.왼쪽: bottom 경계의 행을 역순으로 순회.위: left 경계의 열을 역순으로 순회.조건 검증:각 방향으로 이동하기 전에 남은 경계 조건(top , left )을 확인.Solution 💻class Solution: def sp..
· 알고리즘
📌 LeetCode [211]: Design Add and Search Words Data Structure🔗 문제 링크문제 설명 📄WordDictionary라는 클래스를 설계해야 합니다. 이 클래스는 다음 두 가지 기능을 포함합니다:단어 추가 (addWord): 단어를 데이터 구조에 추가.단어 검색 (search): 특정 단어가 존재하는지 확인.와일드카드 .는 어떤 문자와도 매칭 가능.문제 접근 방식 📋Trie(접두사 트리) 사용:addWord는 단어를 Trie에 삽입.search는 와일드카드를 처리하며 Trie를 탐색.와일드카드 처리:.는 모든 자식 노드를 탐색해야 하므로 재귀적으로 탐색.효율성 고려:일반 검색은 Trie를 통해 빠르게 이루어짐.와일드카드가 포함된 검색은 재귀 호출로 해결.So..
알고리즘 노트
알고리즘 노트