[프로그래머스] 문자열(permutations) - 소수만들기 (Python)

Daisy 🌼·2022년 8월 2일
0

프로그래머스

목록 보기
24/36
post-thumbnail

문제출처 : 프로그래머스

1. 문제 👻

  • 문제 설명
    주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

  • 제한사항
    nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
    nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

  • 입출력 예

  • 입출력 예 설명
    입출력 예 #1
    [1,2,4]를 이용해서 7을 만들 수 있습니다.

  • 입출력 예 #2
    [1,2,4]를 이용해서 7을 만들 수 있습니다.
    [1,4,6]을 이용해서 11을 만들 수 있습니다.
    [2,4,7]을 이용해서 13을 만들 수 있습니다.
    [4,6,7]을 이용해서 17을 만들 수 있습니다.


2. My cording 👩‍💻

문제풀이 : combinations 모듈, 소수판별 함수 활용

# 하나의 리스트에서 모든 조합을 계산을 해야 한다면, permutations, combinations을 사용
# 두 개 이상의 리스트에서 모든 조합을 계산해야 한다면, product를 사용
from itertools import combinations

def sosu(num):
    if num == 0 or num == 1:
        return False
    else:
        for n in range(2, (num//2)+1): # 공식
            if num % n == 0:
                return False
        return True
           
def solution(nums):
    answer = 0
    cbn = list(combinations(nums, 3)) # 3개씩 조합
    for i in cbn:
        if sosu(sum(i)) == True: # 조합한 것을 하나씩 sum
            answer += 1
           
    return answer

💡 Today I learned
리스트 내 모든 조합을 계산해주는 permutations, combinations, product의 기능을 처음 알았다. 이렇게도... 편리한 모듈이 있다니...❤️


추가하자면, permutations와 combinations, product의 차이는 아래와 같다.

  • permutations : 하나의 리스트에서 모든 조합을 계산, 중복허용(X), 순서의미(O)
items = ['1', '2', '3', '4', '5']
from itertools import permutations
list(permutations(items, 2))
# [('1', '2'), ('1', '3'), ('1', '4'), ('1', '5'), ('2', '1'),
 # ('2', '3'), ('2', '4'), ('2', '5'), ('3', '1'), ('3', '2'),
 # ('3', '4'), ('3', '5'), ('4', '1'), ('4', '2'), ('4', '3'),
 # ('4', '5'), ('5', '1'), ('5', '2'), ('5', '3'), ('5', '4')]
  • combinations : 하나의 리스트에서 모든 조합을 계산, 중복허용
from itertools import combinations
list(combinations(items, 2))
# [('1', '2'), ('1', '3'), ('1', '4'), ('1', '5'), ('2', '3'),
# ('2', '4'), ('2', '5'), ('3', '4'), ('3', '5'), ('4', '5')]
  • product : 두 개 이상의 리스트에서 모든 조합을 계산
from itertools import product

items = [['a', 'b', 'c,'], ['1', '2', '3', '4'], ['!', '@', '#']]
list(product(*items))
# [('a', '1', '!'), ('a', '1', '@'), ('a', '1', '#'), ('a', '2', '!'),
# ('a', '2', '@'), ('a', '2', '#'), ('a', '3', '!'), ('a', '3', '@'),
# ('a', '3', '#'), ('a', '4', '!'), ('a', '4', '@'), ('a', '4', '#'),
# ('b', '1', '!'), ('b', '1', '@'), ('b', '1', '#'), ('b', '2', '!'),
# ('b', '2', '@'), ('b', '2', '#'), ('b', '3', '!'), ('b', '3', '@'),
# ('b', '3', '#'), ('b', '4', '!'), ('b', '4', '@'), ('b', '4', '#'),
# ('c,', '1', '!'), ('c,', '1', '@'), ('c,', '1', '#'), ('c,', '2', '!'),
# ('c,', '2', '@'), ('c,', '2', '#'), ('c,', '3', '!'), ('c,', '3', '@'),
# ('c,', '3', '#'), ('c,', '4', '!'), ('c,', '4', '@'), ('c,', '4', '#')]
profile
세상을 이롭게하는 AI Engineer

0개의 댓글