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
- 파이썬 알고리즘
- LeetCode
- 알고리즘풀이
- leetcode 풀기
- 릿코드 풀기
- python zip_longest
- 파이썬 알고리즘 풀기
- 릿코드풀기
- 파이썬릿코드풀기
- python xor
- 릿코드풀이
- leetcode풀이
- 잇츠디모
- python priority queue
- 파이썬 프로그래머스
- python 알고리즘
- 릿코드 파이썬
- 상가수익률계산기
- 파이썬 릿코드
- python Leetcode
- 알고리즘풀기
- 릿코드
- 파이썬알고리즘
- leetcode풀기
- python 릿코드
- binary search
- 코틀린기초
- python sorted
- 파이썬알고리즘풀기
- 파이썬릿코드
Archives
- Today
- Total
소프트웨어에 대한 모든 것
LeetCode 풀기 - 454. 4Sum II 본문
반응형
454. 4Sum II
https://leetcode.com/problems/4sum-ii/
문제)
솔루션1) brute-force
O(n^4)으로 풀었더니 역시나 TLE(Time Limit Exceeded) 발생합니다.
class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
count = 0
for n1 in nums1:
for n2 in nums2:
for n3 in nums3:
for n4 in nums4:
if (n1 + n2 + n3 + n4) == 0:
count +=1
return count
솔루션2) HashMap
O(n^4) 시간 복잡도를 O(n^2)로 줄여서 문제를 풀어봅니다.
두 그룹으로 나누어서 계산을 하는 방식입니다.
첫 번째 그룹에서는 sum을 계산해서 hash에 키로 sum 값을 저장하고 value에는 count를 저장합니다.
두 번째 그룹에서는 첫 번째 그룹과의 sum이 0을 만들어 내는 sum을 -sum을 찾아서 count를 더해서 찾는 방식입니다.
설명이 더 어렵네요. 코드를 보는 것이 더 이해하기 쉬울 것입니다.
class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
"""
Time Complexity : O(2n^2)
"""
d = defaultdict(int)
for n1 in nums1:
for n2 in nums2:
d[n1+n2] += 1
count = 0
# nums1 + nums2 + nums3 + nums4 = 0 --> nums1 + nums2 = -(nums3+ nums4)
for n3 in nums3:
for n4 in nums4:
count += d[-(n3+n4)]
return count
Counter 객체 사용
class Solution:
def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
c = Counter([n1+n2 for n1 in nums1 for n2 in nums2])
return sum(c[-n3-n4] for n3 in nums3 for n4 in nums4)
반응형
'알고리즘 > LeetCode' 카테고리의 다른 글
LeetCode 풀기 - 532. K-diff Pairs in an Array (0) | 2022.02.09 |
---|---|
LeetCode 풀기 - 258. Add Digits (0) | 2022.02.08 |
LeetCode 풀기 - 965. Univalued Binary Tree (0) | 2022.01.15 |
LeetCode 풀기 - 1022. Sum of Root To Leaf Binary Numbers (0) | 2022.01.11 |
LeetCode 풀기 - 382. Linked List Random Node (0) | 2022.01.11 |
Comments