새소식

⌨️ Algorithms/프로그래머스

[Python] 프로그래머스 Lv2_소수 찾기

2022. 8. 1. 23:05

  • -

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

 

프로그래머스

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

programmers.co.kr

 

"""
입출력 예시)

numbers = "17" -> 3
numbers = "011" -> 2
"""

from itertools import permutations

# 소수인지 판별
def is_prime_n(x):
    if x < 2:
        return False
    
    for i in range(2, x):
        if x % i == 0:
            return False
    
    return True


def solution(numbers):
    answer = 0
    num = []
    
    for i in range(1, len(numbers)+1):
        num.append(list(set(map(''.join, permutations(numbers, i)))))
    per_list = list(set(map(int, set(sum(num, []))))) # 순열 리스트 
    
    for p in per_list:
        if is_prime_n(p) == True:
            answer += 1
            
    return answer

 

 

 


 

  • 순열 permutations() 사용
from itertools import permutations
permutations(iterable, r) # r: 뽑을 원소의 개수

 

  • ex) A, B, C 라는 세 개의 문자 중 두 개를 무작위로 뽑았을 때의 순열과 조합
    • 순열: AB, AC, BA, BC, CA, CB
      • itertools.permutations(['A', 'B', 'C'], 2)
    • 조합: AB, AC, BC
      • itertools.combinations(['A', 'B', 'C'], 2)
  • 순열
    • itertools.permutations(iterable, r)
  • 조합
    • itertools.combinations(iterable, r)

 

https://itholic.github.io/python-combination-permutation/

 

[python] itertools를 이용해 순열과 조합 구하기

itertools를 이용해 순열과 조합 구하기

itholic.github.io

 

 

 

  • num, per_list 
# num, per_list 확인

def solution(numbers):
    answer = 0
    num = []
    
    for i in range(1, len(numbers)+1):
        num.append(list(set(map(''.join, permutations(numbers, i)))))
    print('num:', num)
    
    per_list = list(set(map(int, set(sum(num, []))))) 
    print('per_list:', per_list)


"""
numbers = "17"
-> num: [['1', '7'], ['17', '71']]
-> per_list: [17, 71, 1, 7]

numbers = "011"
-> num: [['0', '1'], ['01', '11', '10'], ['101', '011', '110']]
-> per_list: [0, 1, 101, 10, 11, 110]
"""

 

 

  • sum(num, [])
    • sum(덧셈할 것, 처음에 더할 것)
    • 처음에 더할 것으로 빈 리스트 [ ]를 넣어주면
      sum(num, []) => [] + [1,7] + [71, 17]
    • -> 리스트끼리의 덧셈으로 [1,7, 71, 17]이 됨
  •  
 
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!