알고리즘

· 알고리즘
📌 LeetCode [628]: Maximum Product of Three Numbers🔗 문제 링크문제 설명 📄정수 배열 nums가 주어졌을 때, 세 숫자의 곱 중 최대값을 반환하세요.배열의 길이는 최소 3입니다.음수와 양수 값이 포함될 수 있습니다.문제 접근 방식 📋정렬을 활용:배열을 정렬하여 가장 큰 3개 값과 가장 작은 2개 값 및 가장 큰 값을 고려합니다.음수 두 개와 양수 하나를 곱했을 때가 더 클 수 있으므로 이를 함께 비교합니다.시간 복잡도: 정렬은 O(n \log n)입니다.공간 복잡도: 정렬된 배열을 재사용하므로 O(1)입니다.Solution 💻class Solution: def maximumProduct(self, nums: List[int]) -> int: ..
· 알고리즘
📌 LeetCode [605]: Can Place Flowers🔗 문제 링크문제 설명 📄flowerbed라는 정수 배열과 정수 n이 주어집니다.배열의 각 요소는 0(비어 있음) 또는 1(꽃 심어져 있음)을 나타냅니다.꽃은 인접한 곳에 심을 수 없습니다.n개의 꽃을 심을 수 있으면 True, 그렇지 않으면 False를 반환하세요.문제 접근 방식 📋현재 위치에서 심을 수 있는지 판단:현재 위치가 0이고, 좌우 모두 0이라면 꽃을 심을 수 있습니다.조건 확인:꽃을 심으면 해당 위치를 1로 변경하고 n을 감소시킵니다.모든 꽃을 심으면 (n == 0) True를 반환합니다.최종 판단:반복문 종료 후에도 n이 남아 있으면 False를 반환합니다.Solution 💻class Solution: def c..
· 알고리즘
📌 LeetCode [141]: Linked List Cycle🔗 문제 링크문제 설명 📄주어진 연결 리스트에 사이클이 존재하는지 확인하세요.사이클이 있다면 True를, 없다면 False를 반환해야 합니다.문제 접근 방식 📋해시맵을 이용한 중복 검사:연결 리스트를 순회하면서 각 노드를 해시맵에 저장.노드가 이미 해시맵에 존재한다면 사이클이 존재한다고 판단.순회 종료 조건:head가 None에 도달하면 사이클이 없다고 판단.Solution 💻# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: ..
· 알고리즘
📌 LeetCode [2231]: Largest Number After Digit Swaps by Parity🔗 문제 링크문제 설명 📄주어진 정수 num의 각 자릿수를 교환하여 다음 규칙에 따라 가장 큰 수를 만드세요:짝수끼리는 교환 가능하며, 홀수끼리는 교환 가능하지만 짝수와 홀수는 교환할 수 없습니다.문제 접근 방식 📋짝수와 홀수 판단 함수:각 숫자를 짝수와 홀수로 분류하기 위해 mod 2 연산을 사용합니다.배열 변환:주어진 숫자 num을 문자열로 변환하고, 각 자릿수를 리스트로 변환하여 작업합니다.정렬:현재 인덱스와 이후의 숫자를 비교하며 같은 성질(짝수/홀수)을 가지는 숫자 중 가장 큰 값을 찾습니다.최종 결과 반환:리스트를 다시 문자열로 합친 후 정수로 변환하여 반환합니다.Solution..
· 알고리즘
📌 LeetCode [1275]: Find Winner on a Tic Tac Toe Game🔗 문제 링크문제 설명 📄3x3 크기의 Tic Tac Toe 보드에서 moves가 주어집니다.게임에서 승자가 결정되거나 모든 칸이 채워질 때까지의 과정을 시뮬레이션합니다."A"와 "B"가 번갈아가며 이동하며, "A"가 먼저 시작합니다.승자가 발생하면 "A" 또는 "B"를 반환합니다.모든 칸이 채워졌는데 승자가 없으면 "Draw"를 반환합니다.아직 칸이 남아있으면 "Pending"을 반환합니다.문제 접근 방식 📋보드 생성 및 이동 처리:3x3 보드를 생성하여 "X"와 "O"로 표시합니다.moves를 순차적으로 처리하며 보드에 이동을 기록합니다.승리 여부 확인:각 칸에서 DFS를 사용하여 3개의 동일한 마크가..
· 알고리즘
📌 LeetCode [1710]: Maximum Units on a Truck🔗 문제 링크문제 설명 📄트럭에 적재할 수 있는 최대 유닛을 계산하는 문제입니다.박스의 종류와 각각의 박스당 유닛 수가 주어졌을 때, 유닛 수가 많은 박스를 우선적으로 적재하여 최대 유닛을 적재해야 합니다. 트럭에는 제한된 수의 박스만 적재할 수 있습니다.문제 접근 방식 📋정렬:박스당 유닛 수를 기준으로 내림차순 정렬합니다.최적 적재:각 박스 타입에서 현재 트럭이 적재 가능한 박스 수를 계산하고, 트럭 크기를 감소시킵니다.트럭이 가득 찼으면 루프를 종료합니다.Solution 💻class Solution: def maximumUnits(self, boxTypes: List[List[int]], truckSize: i..
· 알고리즘
📌 LeetCode [1957]: Delete Characters to Make Fancy String🔗 문제 링크문제 설명 📄주어진 문자열 s에서 연속된 동일한 문자가 3개 이상 나오지 않도록 문자를 삭제하여 새로운 문자열을 반환해야 합니다.문제 접근 방식 📋스택 활용:문자열을 순회하며 각 문자를 스택에 추가합니다.스택의 길이가 3 이상일 때, 마지막 세 문자가 동일하면 가장 마지막 문자를 제거합니다.이를 반복하면서 조건에 맞는 결과 문자열을 생성합니다.시간 복잡도 최적화:스택을 사용하여 O(n) 시간 복잡도로 해결할 수 있습니다.Solution 💻class Solution: def makeFancyString(self, s: str) -> str: stack = [] ..
· 알고리즘
📌 LeetCode [2053]: Kth Distinct String in an Array🔗 문제 링크문제 설명 📄주어진 문자열 배열 arr에서 고유한 문자열(distinct string) 중 k번째 문자열을 반환합니다. 고유한 문자열은 배열에서 한 번만 등장하는 문자열입니다.k번째 고유 문자열이 존재하지 않으면 빈 문자열 ""을 반환합니다.문제 접근 방식 📋문자열 빈도 계산:Counter를 사용해 배열 arr에서 각 문자열의 빈도수를 계산합니다.순서 유지:등장 순서대로 문자열을 저장하기 위해 OrderedDict를 사용합니다.빈도수가 1인 문자열만 OrderedDict에 저장합니다.k번째 문자열 반환:OrderedDict의 키를 리스트로 변환해 인덱스를 통해 k번째 문자열을 찾습니다.Soluti..
알고리즘 노트
'알고리즘' 카테고리의 글 목록 (3 Page)