STUDY/Algorithm

[프로그래머스] LEVEL2 소수 찾기, python3,완전탐색

sinawi95 2019. 11. 4. 10:22
728x90

from itertools import permutations

def solution(numbers):
    answer = 0
    ## permutation of elements of numbers
    c_arr = list(set(map(int, [''.join(j) for i in range(len(numbers)) for j in permutations(numbers, i+1)])))
    
    ## Sieve of Eratosthenes
    prime_num=[]
    max_arr=max(c_arr)
    chk=[False]*2+[True]*(max_arr-1)    
    for i in range(2,max_arr+1):
        if chk[i]:
            prime_num.append(i)
            for j in range(2*i,max_arr+1,i):
                if chk[j]:
                    chk[j]=False

    ## how many is prime number in c_arr
    answer=len([i for i in c_arr if i in prime_num])
    
    return answer

 


소수 찾기는 LEVEL1에서 이미 에라토스테네스의 체를 사용했던적이있어서 쉬울줄 알았는데 주어진 문자열을 조합해서 만들어내는게 힘들었다.

하나씩 빼서 조합할까 생각했었는데 그러면 너무 C처럼 하는거 같아서 다른방법을 찾아보기로 했다.

찾아보니 다음과 같은 것을 찾을수있었다.

https://programmers.co.kr/learn/courses/4008/lessons/12836#note

 

파이썬을 파이썬답게 - 순열과 조합 - combinations, permutations | 프로그래머스

본 강의는 파이썬 문법을 이미 알고 있는 분들을 대상으로 만들어졌습니다. ##### 이런 분들께 추천합니다 * 파이썬 문법을 알고 계시는 분 * 알고리즘 문제를 조금 더 쉽게 풀고 싶은 분 * Python 코드를 low level 언어( C / C++ ) 코드처럼 짜시는 분 ##### Glossary 본 강의에서 사용하는 파이썬 용어에 익숙하지 않은 분들을 위해, [Python 3.6

programmers.co.kr

딱 내가 하려던게 해당 링크의 첫번째였다.

파이썬에서는 itertools.permutations 를 사용하면 쉽게 구해낼수 있었다.

위의 한줄짜리 코드는 질문하기에 있던 것을 가져왔다(정말 파이썬다운 문장이다ㅋㅋ)


이전에 했던것도 찾아가고 새로운걸 익히면서 하긴하는데 아예 새로운게 나오니 혼자의 힘으로 하기 버거워 진다