본문 바로가기
프로그래머스/2단계

(Python/LV2)소수찾기_Lv2

by windy7271 2022. 9. 13.
728x90
반응형

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/42839

 

프로그래머스

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

programmers.co.kr

풀이:

from itertools import permutations

def solution(n):
    numbers = [i for i in n]

    com_list = []
    for i in range(1, len(numbers) + 1):
        com_list += list(permutations(numbers, i))

    new_list = set(int(("").join(i)) for i in com_list)
    new_list_len = len(new_list)

    for i in new_list:
        if i < 2:
            new_list_len -= 1
        for j in range(2, int(i**0.5) +1 ):
            if i%j ==0:
                new_list_len -=1
                break
    return new_list_len

permutations 조합. 에라토스테네스 체

 

1) 받은 수 잘라서 리스트 만듦

2) 나오는 경우의 수 com_list 에 넣음

3) com_list 돌면서 "" 애고 인트형으로 바꿔주면서 set함수로 중복제거 

       3.1) int 형 하지 않으면 밑에 for 문에서 str 형이라고 걸림

      3-2) list 로 하면 예를들어 111 이 들어가면 

[1, 1, 1, 11, 11, 11, 11, 11, 11, 111, 111, 111, 111, 111, 111] 으로 나온다.

4) for 문 돌려서

5) 소수 아닌 갯수 만큼 원래 new_list_len 에서 빼주면 소수 의 갯수가 나옴

 

 

리스트 컴프리핸션

com_list = []
    for i in range(1, len(numbers) + 1):
        com_list += list(permutations(numbers, i))

--------위와 아래와 같음--------
# com_list2 = sum([ list(permutations(numbers, i)) for i in range(1, len(numbers) + 1)],[])

# sum(2차원리스트, []) 을 해주면  2차원 리스트로 만들어준다.

밑에 조건 있는 이중 포문은 못 하겠다.

반응형

댓글