알고리즘/프로그래머스

[Programmers] 삼총사 _Python

3o14 2022. 12. 1. 16:07
728x90
반응형

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131705

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

 

# itertools 모듈에서 combinations 함수 사용 (집합 뽑기)
from itertools import combinations
    
def solution (number) :
	# 정답이 되는 삼총사의 개수를 변수
    cnt = 0 
        
    # combinations함수를 이용해
    # number 배열에서 원소 3개씩 조합을 뽑아서 i에 담는 반복문
    for i in combinations(number,3) :
	    # i의 합이 0이 될 경우 삼총사임
        if sum(i) == 0 : 
            cnt += 1
    return cnt

 

 


새로 알게 된 모듈

- itertools

 

itertools - 효율적인 루핑을 위한 이터레이터를 만드는 함수

 

그 중에서도 조합 / 순열 함수인 아래 4가지 함수에 대해서 알아보자.

 

combinations()
combinations_with_replacement()
product()
permutations()

 

📍combinations (iterable, r)

iterable에서 원소 개수가 r개인 조합 뽑기

from itertools import combinations

if __name__ == '__main__':
    arr = [1, 2, 3, 4]
    for i in combinations(arr, 3):
        print(i)
출력 결과
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)

 

📍combinations_with_replacement (iterable,r)

iterable에서 원소 개수가 r개인 중복 조합 뽑기

from itertools import combinations_with_replacement

if __name__ == '__main__':
    arr = [1, 2, 3, 4]
    for i in combinations_with_replacement(arr, 2):
        print(i)
출력 결과
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 2)
(2, 3)
(2, 4)
(3, 3)
(3, 4)
(4, 4)

 

📍permutations(iterable,r)

iterable에서 원소 개수가 r개인 순열 뽑기

from itertools import permutations

if __name__ == '__main__':
    arr = [1, 2, 3, 4]
    for i in permutations(arr, 2):
        print(i)
출력 결과
(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 3)
(2, 4)
(3, 1)
(3, 2)
(3, 4)
(4, 1)
(4, 2)
(4, 3)

 

📍product(*iterables, repeat=1)

여러 iterable의 데카르트곱 반환

 

🖐🏻 잠깐! 여기서 데카르트곱이란?

임의의 두 집합 A B에 대해서 두 집합의 데카르트 곱 
집합 의 원소 a와 집합 B의 원소 의 순서쌍(ordered pair) 으로 만들어지는 집합이다. 

 



from itertools import product

if __name__ == '__main__':
    arr1 = ['A', 'B', 'C']
    arr2 = ['1', '2', '3']

    for i in product(arr1, arr2, repeat=1):
        print(i)
출력 결과
('A', '1')
('A', '2')
('A', '3')
('B', '1')
('B', '2')
('B', '3')
('C', '1')
('C', '2')
('C', '3')
LIST