알고리즘/프로그래머스문제풀이

[Python/프로그래머스] 소수 찾기_완탐

개발자 덕구🐾 2022. 6. 19. 16:30
728x90

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

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr

 

 


 

코드 : 

 

from itertools import permutations

# 소수 판별 
def is_prime_number(x) :
    if x <2 : # 1 또는 0 
        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) : # 1자리부터 len(numbers)자리까지 (range에서 두번째수의 -1만큼 돌리니까)
        # 나올 수 있는 모든 수의 조합
        num.append(list(set(map(''.join,permutations(numbers,i)))))
    per = list(set(map(int, set(sum(num,[])))))
    
    for p in per :
        if is_prime_number(p) :
            answer+=1 
    return answer

set을 먼저해서 중복을 없애주고 list로 만들어준 다음 append한다. 

 

 

 

per = list(set(map(int, sum(num,[])))) 이렇게 set을 하나만 이용해도 된다. 

 

 

 

 

복습하며 만든 코드 : 

 

from itertools import permutations 

def is_prime_number(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.extend(list(set(map(''.join,permutations(numbers,i)))))
        
    per = list(set(map(int,num)))
    for p in per :
        if is_prime_number(p) :
            answer +=1 
        
        
    return answer

extend를 사용하면 sum을 이용한 배열 덧셈 안해도 된다. 

extend를 사용하면 하나의 리스트에 요소들이 추가되는 형태가 되기때문이다. 

 

 

위 코드에서는 set을 for문에서 한번, per를 만들어줄 때 또 한번 이용했는데

for문에서의 set은 없애도 된다. 

 

 

from itertools import permutations
def is_prime_number(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.extend(list(map(''.join,permutations(numbers,i))))
    
    per = list(set(map(int,num)))
    
    for p in per :
        if is_prime_number(p) :
            answer +=1 
    
    return answer

 

 

 

 

 

 

 

 

배운 점 : 

 

1. sum(num, []) 와 같은 신박한 리스트끼리의 덧셈 

 

 

2. join을 map에서 사용할 때는 ()가 필요없음 

 

 

3. 당연하지만 1, 0 은 소수로 안본다.

 

 

4. permutations의 반환 값

리스트의 형태로 출력해서 보면 이렇다.

이렇게 반환되기 때문에 join을 이용해서 엮어줘야한다. 

 

 

 

 

 

 

참고 블로그 : 

 

https://iambeginnerdeveloper.tistory.com/122

 

[프로그래머스] Level2 | 소수찾기 - 파이썬(Python) | 완전탐색

https://programmers.co.kr/learn/courses/30/lessons/42839?language=python3 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는..

iambeginnerdeveloper.tistory.com

 

 

복습 :

 

20220621

✅ 20220623

✅ 20220624

✅ 20220626

✅ 20220630

반응형