[프로그래머스] 소수 찾기(python)

.·2022년 4월 13일
0

문제 링크 - https://programmers.co.kr/learn/courses/30/lessons/42839




나의 풀이

from itertools import permutations
def solution(numbers):
    numbers_list = []
    for i in range(1, len(numbers)+1):
        numbers_list.extend(list(permutations(numbers, i)))
    # print(set(numbers_list))
    cnt = 0
    for number in set(numbers_list):
        a = ''
        if len(number) == 1:
            a = number[0]
        else:
            for num in number:
                a+=num
        # print(a)
        if a[0] == '0' or a == '1':
            continue
        else:
            for i in range(2, int(int(a)**0.5)+1):
                if int(a)%i == 0:
                    break
            else:

                cnt+=1
    return cnt
  • permutations으로 만들 수 있는 경우를 다 만들고 set으로 중복되는 거 제거
  • 만약 길이가 1이라면 그냥 그대로 사용
  • 1이 아니라면 a에 더하면서 저장
  • 그 후 a의 첫번째 자리가 0이거나 a가 1이면 continue
  • 그게 아니라면 에스테라토스의 체로 소수를 구해서 cnt + 1
  • for와 함께 쓰는 else는 for문이 중간에 break 등으로 끊기지 않고, 끝까지 수행 되었을 때 수행하는 코드를 담고 있다.

다른 사람의 풀이

from itertools import permutations
def solution(n):
    a = set()
    for i in range(len(n)):
        a |= set(map(int, map("".join, permutations(list(n), i + 1))))
    a -= set(range(0, 2))
    for i in range(2, int(max(a) ** 0.5) + 1):
        a -= set(range(i * 2, max(a) + 1, i))
    return len(a)

0개의 댓글

관련 채용 정보