전체 글

알고리즘 블로그
· 알고리즘
📌 LeetCode [860]: Lemonade Change🔗 문제 링크문제 설명 📄레모네이드를 판매하면서 고객이 지불한 금액에 대해 거스름돈을 정확히 제공할 수 있는지 확인하는 문제입니다.레모네이드 가격은 5달러입니다.고객이 (5), (10), (20) 달러 지폐 중 하나를 지불합니다.거스름돈은 항상 적은 수의 지폐를 우선적으로 사용해야 합니다.입력: 지폐 배열 bills출력: 거스름돈을 정확히 줄 수 있으면 True, 그렇지 않으면 False문제 접근 방식 📋현금 관리:(5)달러와 (10)달러 지폐의 개수를 money 딕셔너리로 추적합니다.조건 처리:(5)달러 지폐: 추가만 하면 됩니다.(10)달러 지폐: (5)달러로 거스름돈을 제공합니다.(20)달러 지폐:(10 + 5)달러로 거스름돈을 주거..
· 알고리즘
📌 LeetCode [1047]: Remove All Adjacent Duplicates In String🔗 문제 링크문제 설명 📄문자열 s가 주어졌을 때, 인접한 중복 문자 쌍을 제거하는 문제입니다.중복 문자 제거는 반복적으로 수행되며, 더 이상 제거할 수 없을 때 최종 문자열을 반환합니다.문제 접근 방식 📋스택 활용:스택을 사용하여 문자열의 문자를 순회하며 인접한 문자가 중복되는 경우 제거.스택의 마지막 문자가 현재 문자와 같다면 스택에서 제거.그렇지 않다면 스택에 현재 문자를 추가.결과 반환:최종 스택에 남아 있는 문자를 이어 붙여 결과 반환.Solution 💻class Solution: def removeDuplicates(self, s: str) -> str: stac..
· 알고리즘
📌 LeetCode [1752]: Check if Array Is Sorted and Rotated🔗 문제 링크문제 설명 📄정수 배열 nums가 주어졌습니다.배열이 정렬된 상태에서 순환된 형태인지 확인하는 문제입니다.순환된 배열은 정렬된 배열의 일부가 뒤로 이동된 상태입니다.예: [3, 4, 5, 1, 2]는 [1, 2, 3, 4, 5]의 순환된 형태입니다.문제 접근 방식 📋정렬된 배열 생성:주어진 배열을 정렬하여 sortNums를 생성합니다.배열 확장:주어진 배열을 두 배로 확장하여 모든 가능한 순환 조합을 확인합니다.순환 배열 비교:확장된 배열의 슬라이싱을 통해 정렬된 배열과 같은 순환 상태인지 확인합니다.Solution 💻class Solution: def check(self, num..
· 알고리즘
📌 LeetCode [884]: Uncommon Words from Two Sentences🔗 문제 링크문제 설명 📄두 개의 문자열 s1과 s2가 주어집니다. 각 문자열은 공백으로 구분된 단어들로 이루어져 있습니다.s1과 s2에서 한 번만 등장하는 단어를 찾아 리스트로 반환하세요.문제 접근 방식 📋문자열 분리:split(" ")을 사용해 각 문장을 단어 단위로 나눕니다.빈도 계산:두 문장에서 각 단어의 빈도를 dict로 저장합니다.희소 단어 추출:빈도가 1인 단어만 결과 리스트에 추가합니다.Solution 💻class Solution: def uncommonFromSentences(self, s1: str, s2: str) -> List[str]: pattern = dict()..
· 알고리즘
📌 LeetCode [3110]: Score of a String🔗 문제 링크문제 설명 📄문자열 s가 주어집니다. 문자열의 점수를 계산하는 규칙은 다음과 같습니다:인접한 두 문자 간의 ASCII 코드 값의 차이를 구합니다.차이의 절대값을 구해 합산합니다.문자열 s의 점수를 반환하세요.문제 접근 방식 📋문자열 탐색:문자열 s를 한 글자씩 순회하며 인접한 두 문자 간의 ASCII 차이를 계산합니다.절대값 계산:abs 함수를 사용해 차이의 절대값을 구하고 누적합에 더합니다.결과 반환:계산된 누적합을 최종 점수로 반환합니다.Solution 💻class Solution: def scoreOfString(self, s: str) -> int: answer = 0 for i i..
· 알고리즘
📌 LeetCode [2037]: Minimum Number of Moves to Seat Everyone🔗 문제 링크문제 설명 📄학생들을 좌석에 앉히는 문제입니다.두 개의 리스트가 주어집니다:seats: 좌석의 위치를 나타내는 정수 리스트.students: 학생들이 현재 위치한 정수 리스트.학생들을 좌석에 앉히기 위해 학생들을 좌석으로 이동시켜야 합니다.이동 거리의 최소 합을 계산하세요.학생은 한 번에 1만큼 이동할 수 있습니다.문제 접근 방식 📋정렬:학생과 좌석을 정렬하여 가장 가까운 순서로 매칭.매칭 및 거리 계산:정렬된 seats와 students를 zip으로 매칭.각 좌석과 학생 간의 거리를 계산하여 합산.Solution 💻class Solution: def minMovesToSe..
· 알고리즘
📌 LeetCode [1200]: Minimum Absolute Difference🔗 문제 링크문제 설명 📄정수 배열 arr가 주어졌습니다. 배열에서 두 수의 차이의 절대값이 최소가 되는 모든 쌍을 찾고, 이를 정렬된 형태로 반환하세요.반환된 쌍은 오름차순으로 정렬되어야 합니다.각 쌍은 [a, b] 형태이며, (a 문제 접근 방식 📋집합 활용:배열을 정렬한 뒤, 집합을 사용하여 숫자의 존재를 빠르게 확인.최소 차이 탐색:인접한 두 원소 간의 차이를 계산하여 최소값을 갱신.결과 쌍 수집:집합에서 최소 차이를 만족하는 쌍을 찾아 결과에 추가.Solution 💻class Solution: def minimumAbsDifference(self, arr: List[int]) -> List[List[..
· 알고리즘
📌 LeetCode [2418]: Sort the People🔗 문제 링크문제 설명 📄주어진 두 개의 리스트 names와 heights가 있습니다:names: 사람들의 이름을 나타내는 문자열 리스트.heights: 사람들의 키를 나타내는 정수 리스트.사람들의 키를 기준으로 내림차순으로 정렬하고, 정렬된 이름 리스트를 반환하세요.문제 접근 방식 📋키와 이름을 쌍으로 묶기:zip을 사용해 키와 이름을 튜플로 묶습니다.키를 기준으로 정렬:sorted를 사용해 각 쌍을 키를 기준으로 내림차순으로 정렬합니다.정렬된 결과에서 이름 추출:정렬된 리스트에서 이름만 추출해 결과를 반환합니다.Solution 💻class Solution: def sortPeople(self, names: List[str], ..
알고리즘 노트
알고리즘 노트