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

 

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

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

programmers.co.kr


내 풀이

 

from itertools import permutations
def solution(numbers):
    answer=0
    pem = []
    n = [k for k in numbers]
    
    for i in range(1,len(numbers)+1):
        pem += list(permutations(n,i))
    
    
    candi = [int(("").join(p)) for p in pem]
    new_candi = list(set(candi))
    

    for j in new_candi:
        
        if j<2:
            continue
        is_prim = True
        for i in range(2,int(j**0.5)+1):
            
            if j%i==0:
                is_prim=False
                break
                
        if is_prim:
            answer+=1
            
            
    return answer

 


예전에 풀었던 소수찾기를 응용한 버전이다.

문제를 풀면풀수록 permutation,combination은 쓸일이 정말 많다라는것을 느낀다.


다른사람의 풀이

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)

a |= 라는 표현을 처음봤는데

어느정도 예상이 되는 연산이였고 or 연산자를 이용한 union 연산이라고 생각하면 된다.

 

s1 = {"a", "b", "c"}
s2 = {"d", "e", "f"}

print(s1 | s2)
# {"a", "b", "c", "d", "e", "f"}
print(s1)
# {"a", "b", "c"}


s1 |= s2

print(s1)
# {"a", "b", "c", "d", "e", "f"}

 


 

'취준 > 프로그래머스' 카테고리의 다른 글

게임 맵 최단거리 - 파이썬  (0) 2022.07.05
조이스틱 - 파이썬  (0) 2022.07.03
가장 큰 수 - 파이썬  (0) 2022.07.01
프린터 - 파이썬  (0) 2022.06.27
튜플 - 파이썬  (0) 2022.06.23

+ Recent posts