-
파이썬 - 리스트 내 n개 값 추출문제풀이/PYTHON 2024. 4. 26. 20:10
nCk
from itertools import combinations def find_zero_sum_triplets(numbers): count = 0 # 리스트 내에서 3개의 값을 선택하는 모든 조합을 생성 for triplet in combinations(numbers, 3): # 선택된 3개의 값의 합이 0이면 count를 증가 if sum(triplet) == 0: count += 1 return count # 예제 사용 numbers = [3, 2, 0, -5, 1, -1, 4, -2, 6] result = find_zero_sum_triplets(numbers) print("Zero sum triplets count:", result)
확통의 그것 / 집합을 사용할 줄 알았으나 리스트에 적용 됨
def find_zero_sum_triplets(numbers): numbers.sort() # 리스트를 정렬합니다. count = 0 n = len(numbers) for i in range(n - 2): # 마지막 세 개의 요소는 고려하지 않습니다. left = i + 1 right = n - 1 while left < right: total = numbers[i] + numbers[left] + numbers[right] if total == 0: count += 1 left += 1 right -= 1 elif total < 0: left += 1 else: right -= 1 return count # 예제 사용 numbers = [3, 2, 0, -5, 1, -1, 4, -2, 6] result = find_zero_sum_triplets(numbers) print("Zero sum triplets count:", result)
from collections import defaultdict def find_zero_sum_triplets(numbers): # 합이 0이 되는 두 수의 합과 위치를 저장하는 해시맵 sum_map = defaultdict(list) n = len(numbers) count = 0 # 모든 가능한 두 수의 합과 위치를 해시맵에 저장 for i in range(n): for j in range(i + 1, n): sum_val = numbers[i] + numbers[j] sum_map[sum_val].append((i, j)) # 남은 한 수를 해시맵에서 찾아서 합이 0이 되는 경우를 찾음 for k in range(n): target = -numbers[k] if target in sum_map: for pair in sum_map[target]: if k != pair[0] and k != pair[1]: # 같은 위치에 있는 경우 제외 count += 1 # 각 경우를 두 번 세었으므로 2로 나누어야 함 return count // 2 # 예제 사용 numbers = [3, 2, 0, -5, 1, -1, 4, -2, 6] result = find_zero_sum_triplets(numbers) print("Zero sum triplets count:", result)
def find_zero_sum_triplets(numbers): def backtrack(start, target_sum, current_combination): if len(current_combination) == 3: if sum(current_combination) == 0: nonlocal count count += 1 return for i in range(start, len(numbers)): if target_sum + numbers[i] * (3 - len(current_combination)) > 0: break current_combination.append(numbers[i]) backtrack(i + 1, target_sum + numbers[i], current_combination) current_combination.pop() count = 0 numbers.sort() backtrack(0, 0, []) return count # 예제 사용 numbers = [3, 2, 0, -5, 1, -1, 4, -2, 6] result = find_zero_sum_triplets(numbers) print("Zero sum triplets count:", result)
'문제풀이 > PYTHON' 카테고리의 다른 글
파이썬 - 문자열 내 반복되는 문자 위치 비교 (0) 2024.05.10 문자열 슬라이스 (0) 2024.05.03 파이썬 - while (1) 2024.04.26 파이썬 - 행렬 덧셈 (0) 2024.04.22 파이썬 - string 내용물 검사 // Error 와 false 차이 (1) 2024.04.19