전체 글

알고리즘 블로그
📌 LeetCode [1717]: Maximum Score From Removing Substrings🔗 문제 링크문제 설명 📄문자열 s에서 다음 두 종류의 패턴을 제거할 수 있습니다:"ab" 제거 시 점수 x 추가"ba" 제거 시 점수 y 추가문자열을 적절히 조작하여 얻을 수 있는 최대 점수를 반환하세요.문제 해결 접근 🚀"ab"와 "ba" 중 점수가 더 높은 것을 먼저 제거합니다.점수 크기 (x와 y)에 따라 처리 순서를 결정하여 불필요한 계산을 줄입니다.스택을 활용하여 문자열을 효율적으로 조작합니다.두 번의 제거 과정을 거쳐 최종 점수를 계산합니다.Solution 💻class Solution: def maximumGain(self, s: str, x: int, y: int) -> in..
· 알고리즘
📌 LeetCode [215]: Kth Largest Element in an Array🔗 문제 링크문제 설명 📄정수 배열 nums와 정수 k가 주어질 때, 배열에서 k번째로 큰 요소를 반환하세요.k번째로 큰 요소는 배열이 정렬되었을 때의 k번째 요소를 의미합니다.문제 해결 접근 🧩최대 힙을 사용한 접근:모든 숫자를 -num 형태로 힙에 추가하여 최대 힙처럼 동작하도록 만듦.힙에서 k-1번 heappop으로 요소를 제거한 후, k번째로 큰 요소를 반환.시간 복잡도는 O(n + k log n).리팩토링 가능 여부:더 빠른 방법:Python의 heapq.nsmallest를 사용하여 O(n + k log n)에서 불필요한 반복 제거 가능.효율적 접근:nums.sort(reverse=True)를 사용해 ..
· 알고리즘
📌 LeetCode [179]: Largest Number🔗 문제 링크문제 설명 📄주어진 비음수 정수 배열 nums를 사용해 숫자를 조합하여 가장 큰 숫자를 생성하세요.결과는 문자열로 반환하며, 숫자가 0만 포함된 경우에는 "0"을 반환합니다.문제 해결 접근 🧩숫자를 조합하여 가장 큰 수를 만들기 위해 문자열로 변환.두 문자열 x와 y를 비교할 때, x+y와 y+x를 비교하여 정렬 순서를 결정.정렬된 숫자를 이어붙여 결과를 반환.첫 번째 숫자가 "0"인 경우 전체 숫자가 0이므로 "0"을 반환.Solution 💻원래 코드from functools import cmp_to_keyclass Solution: def largestNumber(self, nums: List[int]) -> str:..
· 알고리즘
📌 LeetCode [1190]: Reverse Substrings Between Each Pair of Parentheses🔗 문제 링크문제 설명 📄주어진 문자열 s에서 각 괄호 쌍 안에 있는 문자열을 뒤집은 결과를 반환하세요. 중첩된 괄호를 처리해야 하며, 모든 괄호는 유효합니다.문제 해결 접근문자열을 순회하면서 괄호에 따라 처리를 나눕니다.괄호가 열리면(() 재귀적으로 내부를 처리합니다.괄호가 닫히면()) 현재까지 쌓인 문자열을 뒤집어 반환합니다.문자열의 끝까지 탐색 후 스택에 남은 모든 문자를 합쳐 반환합니다.Solution 💻class Solution: def reverseParentheses(self, s: str) -> str: index = 0 def ..
· 알고리즘
📌 LeetCode [2900]: Longest Unequal Adjacent Groups Subsequence I🔗 문제 링크문제 설명 📄주어진 단어 리스트 words와 그룹 리스트 groups가 있습니다. 각 단어는 특정 그룹 번호에 속합니다. 인접한 단어들의 그룹 번호가 같지 않을 경우, 해당 단어를 결과 리스트에 포함합니다.결과 리스트를 반환하세요.문제 해결 접근 🚀초기화: 결과 리스트 answer와 이전 그룹을 저장할 변수 before를 초기화합니다.단어와 그룹 순회: zip을 사용하여 words와 groups를 순회합니다.현재 그룹 번호와 이전 그룹 번호가 다를 경우 해당 단어를 결과 리스트에 추가합니다.이전 그룹 번호를 업데이트합니다.결과 반환: 조건을 만족하는 단어 리스트를 반환합니..
· 알고리즘
📌 LeetCode [824]: Goat Latin🔗 문제 링크문제 설명 📄문장이 주어졌을 때, Goat Latin으로 변환합니다. 변환 규칙은 다음과 같습니다:모음으로 시작하는 단어는 단어 끝에 "ma"를 추가합니다.모음: 'a', 'e', 'i', 'o', 'u' (대소문자 구분 없음).자음으로 시작하는 단어는 첫 글자를 단어 끝으로 이동시키고, "ma"를 추가합니다.변환된 각 단어에 대해, 문장에서의 순서에 따라 끝에 'a'를 추가합니다.첫 번째 단어는 'a', 두 번째 단어는 'aa', 세 번째 단어는 'aaa'...변환된 단어를 공백으로 구분하여 반환합니다.문제 해결 접근 ✨문장 분리 및 순회:입력 문자열을 단어로 나눕니다.각 단어를 순서에 따라 변환합니다.변환 규칙 적용:모음과 자음의 구..
· 알고리즘
📌 LeetCode [1603]: Design Parking System🔗 문제 링크문제 설명 📄주어진 주차 공간 크기에 따라 주차가 가능한지 확인하고, 성공적으로 주차한 경우 해당 공간의 카운트를 줄이는 프로그램을 작성하세요.ParkingSystem 클래스는 세 가지 유형의 주차 공간을 관리합니다:big: 대형차를 위한 공간medium: 중형차를 위한 공간small: 소형차를 위한 공간addCar(carType: int) -> bool 메서드는 차량의 유형을 입력받아, 주차가 가능하면 True를 반환하고 공간을 1 줄입니다. 공간이 부족하면 False를 반환합니다.문제 해결 접근 ✨공간 초기화:생성자를 통해 대형, 중형, 소형 공간의 초기 개수를 저장합니다.차량 유형에 따른 주차 가능 여부 확인:..
· 알고리즘
📌 LeetCode [1046]: Last Stone Weight🔗 문제 링크문제 설명 📄최대 힙을 사용하여 주어진 돌들의 무게를 비교하고, 가장 무거운 두 돌을 충돌시켜 결과를 계산합니다.돌들의 무게 리스트 stones가 주어집니다.각 반복마다 가장 무거운 두 돌을 선택하여 충돌시킵니다:두 돌의 무게가 같다면 두 돌 모두 소멸합니다.두 돌의 무게가 다르다면, 더 큰 무게에서 작은 무게를 뺀 결과가 남습니다.더 이상 충돌할 돌이 없을 때, 남은 돌의 무게를 반환합니다. 만약 남아있는 돌이 없다면 0을 반환합니다.문제 해결 접근 ✨최대 힙을 사용하여 가장 큰 두 돌을 효율적으로 추출:heapq는 기본적으로 최소 힙을 지원하므로, 돌의 무게를 음수로 변환하여 최대 힙처럼 작동하게 만듭니다.반복적으로 두..
알고리즘 노트
알고리즘 노트