반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- javascript
- 파이썬
- 리트코드
- react
- 프로그래머스
- 자바스크립트
- dp
- 웹프로그래밍
- Level2
- 프로그래밍
- Level1
- python
- C++
- 백준
- LeetCode
- CS
- 리액트
- 고득점Kit
- Level3
- OS
- Medium
- 코테연습
- web
- typescript
- 동적계획법
- VUE
- 배열
- sql
- 카카오
- Doitvue.js입문
Archives
- Today
- Total
[리트코드] 18. 4Sum - python 본문
반응형
18. 4Sum
문제
Given an array nums of n integers, return an array of all the unique quadruplets [nums[a], nums[b], nums[c], nums[d]] such that:
- 0 <= a, b, c, d < n
- a, b, c, and d are distinct.
- nums[a] + nums[b] + nums[c] + nums[d] == target
You may return the answer in any order.
제한사항
- 1 <= nums.length <= 200
- -109 <= nums[i] <= 109
- -109 <= target <= 109
풀이
3sum과 비슷하게 풀면 될 것 같은데 O (n^3)으로 풀면 될 것 같다고 생각했다.
이중 포문을 돌리면서 고정 인덱스 두개를 정하고 나머지 범위에서 포인터를 움직이면서 target 값과 mid 가 같은 곳을 찾는다. 조합을 찾아야하기 때문에 중복을 제거 해줘야한다.
class Solution:
def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
nums.sort()
answer = []
for i in range(len(nums) - 3):
if i > 0 and nums[i] == nums[i - 1]:
continue
for j in range(i + 1, len(nums) - 2):
if j - 1 > i and nums[j] == nums[j - 1]:
continue
l, r = j + 1, len(nums) - 1
while l < r:
mid = nums[i] + nums[j] + nums[l] + nums[r]
if mid < target:
l += 1
elif mid > target:
r -= 1
else: # 하나 찾았으므로 중복 제거하고 다음 위치로
answer.append([nums[i] , nums[j] , nums[l] , nums[r]])
while l < len(nums) - 1 and nums[l] == nums[l + 1]:
l += 1
while r > 0 and nums[r] == nums[r - 1]:
r -= 1
l += 1
r -= 1
return answer
반응형
'코테 문제 풀이' 카테고리의 다른 글
[프로그래머스] 위장 - python (0) | 2022.04.14 |
---|---|
[리트코드] 48. Rotate Image (0) | 2022.04.14 |
[리트코드] 16. 3Sum Closest (0) | 2022.04.14 |
[리트코드] 15. 3Sum - python (0) | 2022.04.14 |
[리트코드] 494. Target Sum (0) | 2022.04.13 |
Comments