📌 LeetCode [15]: 3Sum🔗 문제 링크문제 설명 📄정수 배열 nums가 주어졌을 때, 세 수의 합이 0이 되는 모든 고유한 조합을 반환하는 문제입니다.각 조합은 중복되지 않아야 하며, 순서는 상관없습니다.출력은 리스트의 형태로 반환해야 합니다.문제 접근 방식 📋정렬된 배열 활용:배열을 정렬하여 중복 조합을 제거하기 쉽고, 탐색 범위를 줄일 수 있습니다.투 포인터 사용:첫 번째 숫자를 고정한 후, 나머지 두 수를 투 포인터로 찾습니다.투 포인터를 활용하면 두 수의 합을 효율적으로 계산할 수 있습니다.중복 제거:동일한 숫자가 연속으로 나오는 경우 건너뛰어 중복된 조합을 제거합니다.결과는 set을 사용해 중복 방지.Solution 💻class Solution: def threeSum..
전체 글
알고리즘 블로그📌 LeetCode [49]: Group Anagrams🔗 문제 링크문제 설명 📄문자열 배열 strs가 주어질 때, 애너그램(Anagram) 관계인 문자열들을 그룹으로 묶는 문제입니다.애너그램: 단어를 구성하는 문자들이 동일하지만 순서가 다른 경우.각 그룹은 문자열 배열로 반환하며, 그룹 내 문자열의 순서는 중요하지 않습니다.문제 접근 방식 📋문자 빈도 기반 분류:애너그램은 단어를 구성하는 문자의 종류와 개수가 동일합니다.따라서 collections.Counter를 사용해 문자열의 문자 빈도를 계산하고, 이를 기반으로 그룹을 생성할 수 있습니다.Key로 frozenset 사용:frozenset은 변경 불가능한 자료형으로, Counter의 (문자, 빈도)를 키로 사용하여 그룹화할 수 있습니다.효율성..
📌 LeetCode [121]: Best Time to Buy and Sell Stock🔗 문제 링크문제 설명 📄주어진 주식 가격 배열 prices에서 주식을 한 번 사고 한 번 팔았을 때 얻을 수 있는 최대 이익을 계산하는 문제입니다.주식은 미래의 가격을 알 수 없으므로 한 번만 사고, 한 번만 팔 수 있습니다.주식은 반드시 산 이후에 팔아야 합니다.문제 접근 방식 📋최소 가격과 최대 가격 관리:배열을 순회하며 최소 가격(minIndex)과 최대 가격(maxIndex)를 갱신합니다.최소 가격 이후에 최대 가격이 나타나는 경우만 이익을 계산합니다.효율성:배열을 한 번 순회하며 최대 이익을 계산하므로, 시간 복잡도는 O(n)입니다.Solution 💻class Solution: def maxP..
📌 LeetCode [79]: Word Search🔗 문제 링크문제 설명 📄2D 보드 board와 문자열 word가 주어집니다. 보드에서 상하좌우로 이동하며 word를 만들 수 있는지 확인하는 문제입니다.각 글자는 보드에서 반드시 연속적으로 연결되어 있어야 하며, 한 글자는 한 번만 사용할 수 있습니다.board에는 알파벳 대문자가 포함되며, word도 알파벳 대문자로 구성됩니다.문제 접근 방식 📋백트래킹(Backtracking):보드의 각 셀에서 시작하여, 해당 셀이 word의 현재 글자와 일치하면 재귀적으로 다음 글자를 확인합니다.이미 방문한 셀은 임시로 마킹하고, 탐색이 끝난 후 복원합니다.경계 조건:현재 셀이 보드 범위를 벗어나거나 이미 방문했거나, 현재 글자와 word의 글자가 일치하지 ..
📌 LeetCode [128]: Longest Consecutive Sequence🔗 문제 링크문제 설명 📄정수 배열 nums가 주어질 때, 배열에서 연속적인 정수로 이루어진 가장 긴 부분 수열의 길이를 반환하는 문제입니다. 연속적인 정수는 반드시 배열 내에서 이어져 있지 않아도 됩니다.문제 접근 방식 📋연속 범위 확장:각 숫자를 기준으로 연속적인 숫자(left, right)를 양쪽으로 확장하여 가장 긴 연속 수열을 계산합니다.중복 처리 방지:pattern 딕셔너리를 사용하여 이미 방문한 숫자를 추적해 중복 계산을 방지합니다.Solution 💻class Solution: def longestConsecutive(self, nums: List[int]) -> int: patter..
📌 LeetCode [268]: Missing Number🔗 문제 링크문제 설명 📄0부터 n까지의 숫자가 포함된 배열 nums가 주어집니다. 배열에서 하나의 숫자가 누락되어 있을 때, 이 누락된 숫자를 반환하는 문제입니다.문제 접근 방식 📋숫자 포함 여부 확인:주어진 숫자들을 집합으로 저장하고, 0부터 n까지 모든 숫자를 확인하여 누락된 숫자를 반환합니다.리팩토링 아이디어:합 공식을 활용하여 0부터 n까지의 합과 실제 배열의 합을 계산한 뒤, 두 합의 차이를 반환하여 누락된 숫자를 찾습니다.이 방식은 시간 복잡도가 낮고, 추가 공간이 필요하지 않습니다.Solution 💻class Solution: def missingNumber(self, nums: List[int]) -> int: ..
📌 LeetCode [125]: Valid Palindrome🔗 문제 링크문제 설명 📄문자열 s가 주어질 때, 영문자와 숫자만 고려하여 대소문자를 구분하지 않고 회문인지 확인하는 문제입니다.문제 접근 방식 📋영숫자 필터링:문자열에서 영문자(a-zA-Z)와 숫자(0-9)만 남기고, 다른 문자를 제거합니다.이 과정에서 대소문자 구분을 없애기 위해 모든 문자를 소문자로 변환합니다.회문 확인:문자열을 뒤집은 결과(s[::-1])가 원래 문자열과 같은지 비교하여 회문 여부를 확인합니다.Solution 💻class Solution: def isPalindrome(self, s: str) -> bool: s = "".join([i.lower() for i in s if i.isalnum()..
📌 LeetCode [39]: Combination Sum🔗 문제 링크문제 설명 📄정수 배열 candidates와 정수 target이 주어질 때, 후보 숫자들로부터 조합하여 합이 target이 되는 모든 고유한 조합을 반환하는 문제입니다.각 숫자는 무한히 재사용될 수 있으며, 반환된 조합은 사전 순으로 정렬되어야 합니다.문제 접근 방식 📋문제는 백트래킹(Backtracking) 기법을 사용하여 해결할 수 있습니다. 숫자들이 중복되지 않고, 무한히 재사용 가능하므로 각 후보 숫자를 여러 번 포함할 수 있습니다.아이디어 설명 💡정렬: 먼저 candidates 배열을 정렬합니다. 이를 통해 더 이상 target에 도달할 가능성이 없는 경우 반복을 조기에 종료할 수 있습니다.백트래킹:현재 조합(curr..