일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 헤드라인모음
- Python
- 헤드라인
- 기사
- 알고리즘
- 20200816뉴스
- 20201011뉴스
- 20201016뉴스
- 헤드라인뉴스
- 코테
- 헤드라인기사
- 뉴스헤드라인
- MySQL
- 기사헤드라인
- 20201015뉴스
- 파이썬
- 백준
- json
- 크롤링
- 20200615뉴스
- 백준2225
- 20201018뉴스
- 뉴스
- LeetCode #Python #알고리즘 #코딩테스트 #interview
- C++
- 20201013뉴스
- 오늘의뉴스
- 경제뉴스
- 20201017뉴스
- encoding
Archives
- Today
- Total
HelloCho
[Python] 15. 3Sum(Medium) 본문
문제 :
이 문제는 nums 배열에서 3개의 값을 더해 0을 만들 수 있는 조합을 찾는 문제이다.
역시나.. 프로그래밍 초보인 나는 처음 이 문제를 보고... 아 for문을 3개 써서 중복이 아닌 것의 조합을 넣어야 겠다 !! 라고 생각했지만 당연히도(?) 시간 초과이다.
그렇다면 이 문제는 어떻게 접근 하면 좋을까..
2개의 pointer를 이용해서 모든 경우의 수를 찾는 방법이 가장 쉬운(?) 접근인 것 같다.
코드는 아래와 같다.
class Solution:
def threeSum(self,nums):
res = []
nums.sort()
for i, a in enumerate(nums):
if i>0 and a ==nums[i-1] :
continue
l,r = i+1, len(nums)-1
while l<r:
three_sum = a + nums[l] + nums[r]
if three_sum > 0 :
r -= 1
elif three_sum < 0 :
l +=1
else:
res.append([a,nums[l],nums[r]])
l +=1
while nums[l] == nums[l-1] and l<r:
l +=1
return res
코드를 설명하자면 처음에 nums 배열을 정렬한다 (중복 여부를 쉽게 파악할 수 있고, 2개의 포인터를 사용하기 위해서 이다.)
아래 라인에서 l,r이라는 2개의 포인터를 지정한다.
target 숫자가 0 이기때문에 왼쪽과 오른쪽의 포인터를 이동하면서 값을 더해주고 값이 0과 같다면 res에 list를 추가한다.
결과.
788ms(O(n^2)), 17.3MB로 통과.
'코테 > LeetCode' 카테고리의 다른 글
[Python] #18. 4Sum(Medium) (0) | 2020.09.15 |
---|---|
[Python] #16. 3Sum Closest(Medium) (0) | 2020.09.15 |
[Python] #59. Spiral Matrix II(Medium) (0) | 2020.09.11 |
[Python] #54. Spiral Matrix(Medium) (0) | 2020.09.11 |
[Python] #28. Implement strStr()(Easy) (0) | 2020.09.06 |
Comments