[파이썬 코드카타]
삼총사
https://school.programmers.co.kr/learn/courses/30/lessons/131705
1) 어떤 문제가 있었나
- 각 정수 번호를 가지고 있는 학생 3명의 번호를 더 했을 때 0이 되면 삼총사
- 각 정수 배열에서 삼총사를 만들 수 있는 경우의 수를 반환하는 문제
number = [-2, 3, 0, 2, -5]
result = 2
2) 내가 시도해본 건 무엇인가
구글링을 통해서 경우의 수를 뽑아주는 라이브러리 itertools의 존재를 확인
프로그래머스에서 라이브러리 활용이 가능한지 몰라서 우선 함수를 작성해서 시도해봄
3) 어떻게 해결했나
itertools 라이브러리 활용해서 간단히 해결
def solution(number):
from itertools import combinations #순서 상관 없는 경우의 수 나열
answer = 0
three_number = list(combinations(number, 3))
for i in three_number:
if sum(i) == 0:
answer += 1
return answer
4) 무엇을 새롭게 알았나
- itertools 라이브러리의 존재와 세부 활용법
- combinations는 순서를 고려하지 않고, permutation 은 순서를 고려 > 중복 여부에 따라 함수가 또 나뉨
itertools 라이브러리 함수 | 순서 | 중복 | 비고 |
permutations | O | X | |
combinations | X | X | |
product | O | O | 파라미터 repeat 활용 |
combinations_with_replacement | X | O |
# 라이브러리 불러오기 및 데이터 변수 지정
from itertools import *
dataset = ['A', 'B', 'C']
① 순열(Permutation)
- 순서는 고려하나 중복은 없는 조합
permutations_list = list(permutations(dataset, 2))
# 결과
# [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
② 조합(Combination)
- 순서와 중복 모두 없는 조합
combinations_list = list(combinations(dataset, 2))
# 결과
# [('A', 'B'), ('A', 'C'), ('B', 'C')]
③ 중복 순열(Product) a.k.a Permutation with repetition
- 순서와 중복이 모두 있는 조합
- repeat 파라미터를 통해 최대 중복 횟수를 조정할 수 있음 (ex. repeat = 3이면, ('A',' A',' A'), ('A', 'A', 'B')... )
product_list = list(product(dataset, repeat = 2))
# 결과
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
④ 중복 조합(Combination with repetition)
- 순서를 고려하지 않으나 중복은 포함하는 조합
combinations_repeat_list = list(combinations_with_replacement(dataset, 2))
# 결과
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
'TIL' 카테고리의 다른 글
[240318] 스파크(spark): 병렬/분산처리, 샘플링, 분할, Dask, 자동화 (3) | 2024.03.18 |
---|---|
[240318] 파이썬: 코드카타 43 & SQL: 코드카타 149~155 (0) | 2024.03.18 |
[240315] 스파크(spark): 컴퓨터와 데이터, 메모리, 클라우드 (1) | 2024.03.15 |
[240314] 파이썬: 코드카타 41 (0) | 2024.03.14 |
[240313] 파이썬: 코드카타 40 (0) | 2024.03.13 |