문제 출처 : leetcode.com/problems/3sum/
문제 해석 : 주어진 리스트에서 3 수의 합이 0이 되는 조합을 모든 찾아 반환하는 문제이다.
문제 풀이 : 브루트포스로 풀이를 진행하면 시간 복잡도에 의해서 정답 처리를 받지 못한다. 따라서 2개의 수를 더하는 것과 같이하면서 그 사이에 수를 선택하는 방법으로 풀이 할 수 있다.
( 아래 풀이는 "파이썬 알고리즘 인터뷰"를 참고 했습니다. )
풀이 코드
# -- Combination을 이용한 브루트포스 풀이
# from itertools import combinations
# def threeSum(self, nums: List[int]) -> List[List[int]]:
# if len(nums) < 3:
# return []
# else:
# answer = []
# combi = list(combinations(nums, 3))
# for element in combi:
# if sum(element) == 0:
# temp = sorted(list(element))
# if temp not in answer:
# answer.append(temp)
#
# return answer
from typing import List
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
answer = []
nums.sort()
for i in range(len(nums) - 2):
if i > 0 and nums[i] == nums[i - 1]:
continue
left = i + 1
right = len(nums) - 1
while left < right:
sum_temp = nums[i] + nums[left] + nums[right]
if sum_temp < 0:
left += 1
elif sum_temp > 0:
right -= 1
else:
answer.append([nums[i], nums[left], nums[right]])
while left < right and nums[left] == nums[left + 1]:
left += 1
while left < right and nums[right] == nums[right - 1]:
right -= 1
left += 1
right -= 1
return answer
if __name__=="__main__":
solution = Solution()
nums1 = [-1,0,1,2,-1,-4]
nums2 = []
nums3 = [0]
print(solution.threeSum(nums1))
print(solution.threeSum(nums2))
print(solution.threeSum(nums3))
author : donghak park
contact : donghark03@naver.com
## 문제의 저작권은 LeetCode 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.
'📊알고리즘, 문제풀이 > 📈문제풀이 (PS)' 카테고리의 다른 글
[알고리즘][Python] LeetCode 238 Product of Array Except Self 문제 풀이 (0) | 2021.02.19 |
---|---|
[알고리즘][Python] LeetCode 561 Array Partition 1 문제 풀이 (0) | 2021.02.19 |
[알고리즘][Python] LeetCode 42 Trapping Rain Water 문제 풀이 (0) | 2021.02.17 |
[알고리즘][Python] LeetCode 1 Two Sum 문제 풀이 (0) | 2021.02.17 |
[알고리즘][Python] LeetCode 5 Longest Palindromic Substring 문제 풀이 (0) | 2021.02.16 |