Algorithms/LeetCode 80

[LeetCode] 2215. Find the Difference of Two Arrays

1. 문제 이해두 개의 정수 리스트 nums1과 nums2가 주어진다.크기가 2인 리스트 answer을 리턴한다.answer[0]은 nums1에만 있고 nums2에는 없는 모든 고유 정수의 리스트이다. answer[1]은 nums2에만 있고 nums1에는 없는 모든 고유 정수의 리스트이다.  2. 풀이 과정Python의 set 자료형을 사용한다.리스트를 set으로 변환시키고 각각 차집합을 구한다. 처음 짠 코드는 다음과 같다.class Solution: def findDifference(self, nums1: List[int], nums2: List[int]) -> List[List[int]]: nums1 = set(nums1) nums2 = set(nums2) ..

Algorithms/LeetCode 2024.11.12

[LeetCode] 724. Find Pivot Index

1. 문제 이해정수 리스트 nums가 주어진다.리스트의 pivot index를 리턴한다.pivot index는 해당 인덱스를 기준으로 인덱스의 왼쪽에 있는 모든 수의 합과 오른쪽에 있는 모든 수의 합이 동일한 인덱스를 의미한다.  2. 풀이 과정class Solution: def pivotIndex(self, nums: List[int]) -> int: for i in range(len(nums)): left_sum = 0 right_sum = 0 for i2 in range(i): left_sum += nums[i2] for i3 in range(i+1, len(nums)): ..

Algorithms/LeetCode 2024.11.11

[LeetCode] 1732. Find the Highest Altitude

1. 문제 이해한 바이커가 도로 여행을 떠난다.도로 여행은 서로 다른 고도의 n+1 지점으로 구성된다.바이커는 고도가 0인 지점 0에서 여행을 시작한다.길이가 n인 정수 리스트 gain이 주어진다.gain[i]는 지점 i에서 지점 i+1로 이동할 때의 고도 변화량을 나타낸다.도로 여행 중 가장 높은 고도를 리턴한다.  2. 풀이 과정for문으로 리스트 gain의 요소를 더하면서 최댓값을 찾는다.  3. 전체 코드class Solution: def largestAltitude(self, gain: List[int]) -> int: cur_altitude = 0 max_altitude = 0 for i in range(len(gain)): cur..

Algorithms/LeetCode 2024.11.10

[LeetCode] 1493. Longest Subarray of 1's After Deleting One Element

1. 문제 이해이진 리스트 nums가 주어진다.리스트에서 하나의 요소를 무조건 삭제한다.(1로만 이루어진 리스트도!)이후 1로 이루어진 가장 긴 부분 리스트의 길이를 리턴한다.그런 부분 리스트가 없다면 0을 리턴한다.  2. 풀이 과정슬라이딩 윈도우 기법을 활용한다.start 포인터를 0으로 초기화한다.end 포인터를 for문을 통해 이동시킨다. 만약 nums[end]가 0이라면 zero_cnt를 1만큼 증가시킨다.zero_cnt가 1보다 큰 경우 start 포인터를 증가시키며 zero_cnt를 1 이하로 조정한다. 즉 start, end 포인터는 윈도우에 0이 1개 이하로 포함되도록 한다. 1로만 이루어진 리스트에서도 반드시 하나의 요소를 삭제해야 한다.따라서 end - start가 리스트에서 하나의 ..

Algorithms/LeetCode 2024.11.09

[LeetCode] 1004. Max Consecutive Ones III

1. 문제 이해이진 리스트 nums와 정수 k가 주어진다.최대 k개의 0을 뒤집을 수 있다면 리스트에서 연속된 1의 최대 개수를 리턴한다.  2. 풀이 과정슬라이딩 윈도우 기법을 활용한다.start 포인터를 0으로 초기화한다.end 포인터를 for문을 통해 이동시킨다. 만약 num[end]가 0이면 k를 1 감소시킨다.k가 0보다 작아지면, start를 오른쪽으로 이동시키며 윈도우를 축소한다.이때 nums[start]가 0이라면, k를 다시 증가시킨다.  3. 전체 코드class Solution: def longestOnes(self, nums: List[int], k: int) -> int: start = 0 cnt = 0 max_cnt = 0 f..

Algorithms/LeetCode 2024.11.08

[LeetCode] 1456. Maximum Number of Vowels in a Substring of Given Length

1. 문제 이해문자열 s와 정수 k가 주어진다.길이가 k인 s의 모든 부분 문자열 중 모음 문자('a', 'e', 'i', 'o', 'u')의 개수가 최대일 때, 그 개수를 리턴한다.  2. 풀이 과정주어진 문자열을 리스트로 변환한다.모음 문자들을 set으로 정의한다.빈 리스트를 만들어 for문을 돌면서 문자열의 문자를 추가한다.이렇게 처음 풀이한 코드는 다음과 같다.class Solution: def maxVowels(self, s: str, k: int) -> int: current_s = [] vowels = {'a', 'e', 'i', 'o', 'u'} max_cnt = 0 cnt = 0 s = list(s) for ..

Algorithms/LeetCode 2024.11.07

[LeetCode] 1679. Max Number of K-Sum Pairs

1. 문제 이해정수 리스트 nums와 정수 k가 주어진다.한 번의 작업에서, 리스트에서 합이 k인 두 숫자를 선택하여 리스트에서 제거할 수 있다.리스트에서 수행할 수 있는 작업의 최대 횟수를 리턴한다.  2. 풀이 과정리스트를 오름차순으로 정렬한다.리스트의 처음과 끝을 가리키는 투 포인터를 만든다.while 문을 사용해 start 현재 start, end에서 합이 k라면 cnt 변수를 1만큼 증가시킨다. start와 end도 각각 1만큼 증가시키고 감소시킨다.만약 합이 k보다 작다면 start만 1만큼 증가시킨다. k보다 크다면 end만 1만큼 감소시킨다.  3. 전체 코드class Solution: def maxOperations(self, nums: List[int], k: int) -> in..

Algorithms/LeetCode 2024.11.03

[LeetCode] 11. Container With Most Water

1. 문제 이해정수 리스트가 주어진다.리스트의 길이는 n이다.(수직선의 개수는 n이다.)리스트의 i번째 요소는 i번째 수직선의 길이이다. 이 중 두 수직선을 선택하여 x축과 함께 하나의 컨테이너를 형성한다.컨테이너에 가장 많은 물을 담을 수 있는 두 수직선을 찾는다.컨테이너가 담을 수 있는 최대 물의 양을 리턴한다.  2. 풀이 과정리스트의 처음과 끝을 가리키는 투 포인터를 만든다.최대 물의 양 변수를 0으로 초기화한다.while 문을 사용해 start 현재 start, end에서 최대 물의 양과 기존 최대 물의 양을 비교한다.start와 end 중 수직선이 더 짧은 쪽을 업데이트한다.  3. 전체 코드class Solution: def maxArea(self, height: List[int]) -..

Algorithms/LeetCode 2024.10.31

[LeetCode] 392. Is Subsequence

1. 문제 이해문자열 s와 t가 주어진다.s가 t의 subsequence라면 true를, 아니라면 false를 리턴한다.(subsequence는 원래 문자열에서 일부 문자를 삭제하고 남은 문자들의 상대적인 순서를 유지한 문자열이다.) 2. 풀이 과정원래 두 가지 인덱스 i, j를 이용해서 for문 두 개로 문제를 해결하려고 했다.class Solution: def isSubsequence(self, s: str, t: str) -> bool: for i in range(len(s)): for j in range(len(t)): if s[i] == t[j]: i += 1 i..

Algorithms/LeetCode 2024.10.30

[LeetCode] 283. Move Zeroes

1. 문제 이해정수 리스트가 주어진다.리스트 내 모든 0을 리스트의 끝으로 옮기되, 0이 아닌 요소들의 상대적인 순서는 유지한다.(리스트의 복사본을 만들지 않고 제자리에서 수행한다.)  2. 풀이 과정리스트를 반복문으로 돌면서 0이면 리스트에서 제거하고 리스트의 뒤에 추가한다.  3. 전체 코드class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ for num in nums: if num == 0: nums.remove(num) ..

Algorithms/LeetCode 2024.10.30