공부 서랍장/알고리즘 공부

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

만땅이 2022. 9. 18. 21:33

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

 

프로그래머스

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

programmers.co.kr

 

방법1 : 통과

1) new_nums = [int(("").join(p)) for p in per]  를 이용해서 문자열 > 숫자로 변경해서, 결합할 수 있음

2) cnt 쓰지말고 continue하면된다

def perm(arr,n):
    result = []
    if n > len(arr):
        return result
    if n == 1:
        for i in arr:
            result.append([i])
    elif n > 1:
        for i in range(len(arr)):
            ans = [i for i in arr]
            ans.remove(arr[i])
            for p in perm(ans, n-1):
                result.append([arr[i]]+p)
    return result

def solution(numbers):
    answer = []                                   
    nums = [n for n in numbers]                   
    per = []                                      
    for i in range(1, len(numbers)+1):            
        per += list(perm(nums, i))       
        print(per)
    new_nums = [int(("").join(p)) for p in per]   

    
    
    for n in new_nums:                           
        if n < 2:                                 
            continue
        check = True            
        for i in range(2,int(n**0.5) + 1):        
            if n % i == 0:                       
                check = False
                break
        if check:
            answer.append(n)                      

    return len(set(answer))

방법2 테스트 2, 10 시간초과

def perm(arr,n):
    result = []
    if n > len(arr):
        return result
    if n == 1:
        for i in arr:
            result.append([i])
    elif n > 1:
        for i in range(len(arr)):
            ans = [i for i in arr]
            ans.remove(arr[i])
            for p in perm(ans, n-1):
                result.append([arr[i]]+p)
    return result

def solution(numbers):
    answer = 0
    numbers = list(map(str, numbers))
    result = []
    
    for i in range(1, len(numbers) + 1):
        tmp = perm(numbers,i)
        
        result = result + list(set(map(tuple, tmp)))

    tmp = []
    for index, i in enumerate(list(map(list, result))):
        tmp.append(int("".join(i)))
    result = tmp
    result = list(set(result))
    
        
    for k in result:
        cnt = 0

        for j in range(1,k+1):
            if  k % j == 0:
                cnt += 1

        if cnt == 2:
            answer += 1
        cnt = 0
            
    return answer
반응형