📌 LeetCode [1550]: Three Consecutive Odds🔗 문제 링크문제 설명 📄주어진 배열 arr에서 3개의 연속된 홀수를 찾는 문제입니다.연속된 홀수가 발견되면 True를 반환하고, 없으면 False를 반환합니다.문제 접근 방식 📋조건 검사:배열을 순회하며 각 숫자가 홀수인지 확인합니다.홀수라면 카운트를 증가시키고, 짝수를 만나면 카운트를 초기화합니다.결과 반환:카운트가 3에 도달하면 즉시 True를 반환합니다.순회가 끝날 때까지 조건을 만족하지 않으면 False를 반환합니다.Solution 💻class Solution: def threeConsecutiveOdds(self, arr: List[int]) -> bool: answer = 0 fo..
전체 글
알고리즘 블로그📌 LeetCode [1380]: Lucky Numbers in a Matrix🔗 문제 링크문제 설명 📄주어진 행렬에서 Lucky Number를 찾아야 합니다. Lucky Number는 다음 조건을 만족하는 숫자입니다:해당 행의 최소값.해당 열의 최대값.모든 Lucky Number를 리스트로 반환하세요.문제 접근 방식 📋각 행의 최소값을 구합니다.각 열의 최대값을 구합니다.행의 최소값과 열의 최대값의 교집합을 찾으면 Lucky Number가 됩니다.Solution 💻첫 번째 코드class Solution: def luckyNumbers(self, matrix: List[List[int]]) -> List[int]: minCol = [float('inf') for _ in ran..
📌 LeetCode [1636]: Sort Array by Increasing Frequency🔗 문제 링크문제 설명 📄주어진 정수 배열 nums를 다음 규칙에 따라 정렬합니다:각 숫자의 빈도수에 따라 오름차순으로 정렬합니다.빈도수가 동일한 경우, 숫자를 내림차순으로 정렬합니다.정렬된 배열을 반환하세요.문제 접근 방식 📋각 숫자의 빈도를 계산하기 위해 Counter를 사용합니다.빈도수를 기준으로 정렬하고, 동일한 빈도수일 경우 숫자를 내림차순으로 정렬합니다.정렬된 결과를 기반으로 새로운 리스트를 생성합니다.Solution 💻from collections import Counterclass Solution: def frequencySort(self, nums: List[int]) -> Lis..
📌 LeetCode [424]: Longest Repeating Character Replacement🔗 문제 링크문제 설명 📄문자열 s와 정수 k가 주어졌습니다.k번까지 문자를 변경할 수 있을 때, 동일한 문자를 포함하는 가장 긴 부분 문자열의 길이를 반환해야 합니다.변경은 문자열 s의 어떤 문자를 선택하여 다른 대문자 영어 알파벳으로 교체하는 작업입니다.문제 접근 방식 📋슬라이딩 윈도우 활용:문자열의 두 포인터 l과 r을 사용해 윈도우를 확장하거나 축소합니다.부분 문자열 길이와 문자 빈도를 유지하면서 조건을 만족하도록 윈도우를 조정합니다.조건 확인:윈도우 내에서 최빈 문자 외의 문자 개수가 k를 초과하면 윈도우의 왼쪽 포인터(l)를 이동시킵니다.최적화:최빈 문자 개수(max_freq)를 슬라이..
📌 LeetCode [2570]: Merge Two 2D Arrays by Summing Values🔗 문제 링크문제 설명 📄두 개의 2D 배열 nums1과 nums2가 주어졌습니다.각 배열은 [id, value]의 쌍으로 이루어져 있으며, 정렬된 상태입니다.동일한 id 값을 가진 value를 더한 후, 결과를 [id, sum]의 형태로 정렬된 배열로 반환해야 합니다.문제 접근 방식 📋딕셔너리를 이용한 병합:두 배열의 모든 요소를 순회하며, 각 id를 키로 저장하고 value를 더합니다.Python의 defaultdict를 활용하여 초기화 과정을 간소화합니다.결과 생성:딕셔너리의 키를 기준으로 정렬한 후, [id, sum]의 형태로 배열을 생성합니다.시간 최적화:두 배열을 합친 후 병합하는 방식으..
📌 LeetCode [88]: Merge Sorted Array🔗 문제 링크문제 설명 📄두 개의 정렬된 배열 nums1과 nums2가 주어졌습니다.nums1의 크기는 m + n이며, 처음 m개의 요소는 유효하고 나머지는 0으로 비워져 있습니다.nums2는 크기가 n인 정렬된 배열입니다.nums1과 nums2를 병합하여 정렬된 하나의 배열로 만들어야 하며, 제자리에서(in-place) 수정해야 합니다.문제 접근 방식 📋두 포인터를 활용:배열 nums1의 끝에서부터 값을 채워 넣습니다.nums1의 유효한 요소를 가리키는 포인터 left와 nums2의 요소를 가리키는 포인터 index를 사용합니다.가장 큰 값을 뒤에서부터 채워넣으며 nums1의 공간을 채웁니다.반복 조건:index >= 0인 동안 두 ..
📌 LeetCode [21]: Merge Two Sorted Lists🔗 문제 링크문제 설명 📄두 개의 정렬된 단일 연결 리스트 list1과 list2가 주어졌을 때, 두 리스트를 병합하여 정렬된 단일 연결 리스트로 반환하는 문제입니다.새로운 리스트는 두 리스트의 노드를 재사용하여 구성해야 합니다.문제 접근 방식 📋더미 노드 사용:병합 결과를 저장할 새로운 연결 리스트의 시작점을 잡기 위해 더미 노드(answer)를 생성합니다.현재 위치를 추적하기 위해 current 포인터를 사용합니다.리스트 병합:두 리스트를 순회하며, list1.val과 list2.val을 비교합니다.작은 값을 가진 노드를 결과 리스트에 추가하고, 해당 리스트를 다음 노드로 이동시킵니다.잔여 노드 처리:두 리스트 중 하나가 먼..
📌 LeetCode [73]: Set Matrix Zeroes🔗 문제 링크문제 설명 📄2D 행렬 matrix가 주어졌을 때, 요소가 0인 위치의 행과 열 전체를 0으로 바꾸는 문제입니다.행렬을 제자리에서(in-place) 수정해야 하며, 추가적인 공간 사용을 최소화해야 합니다.문제 접근 방식 📋0 위치 기록:2중 루프를 통해 행렬을 순회하며, 값이 0인 좌표를 기록합니다.좌표는 stack에 저장하여 나중에 접근합니다.0 확장:기록된 좌표를 기준으로, 해당 좌표의 행과 열 전체를 0으로 설정합니다.각 방향(왼쪽, 오른쪽, 위, 아래)을 개별적으로 처리하며, 경계 조건을 확인합니다.제자리 수정:행렬을 직접 수정하여 공간 복잡도를 최소화합니다.Solution 💻class Solution: def..