프로그래머스_소수찾기_python

2021. 8. 8. 18:51코딩테스트

반응형

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

 

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

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

programmers.co.kr

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

 

import itertools as it
def solution(numbers):
    answer = 0
    only = set([])
    for num in range(1,len(numbers)+1):
        tmp_it = it.permutations(numbers,num)
        for tmp in tmp_it:
            tmp = int(''.join(tmp))
            if tmp<2:
                continue
            status = False
            for i in range(2,tmp):
                if tmp%i == 0:
                    status = True
                    break
            if status==False:
                only.add(tmp)
    return len(only)

[내코드]

받은 문자열의 갯수대로 순열뽑음. 2부터 만든숫자까지 나눗셈이 가능한지 ck. 나누어지지 않으면 결과에 add.

permutaions(arr, num) : 순서o, arr에서 num개만큼 뽑음

combinations(arr, num) : 순서x, arr에서 num개만큼 뽑음

set : 중복 제거를 위해 list대신 사용

 

 

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)

[다른사람코드]

받은 문자열 갯수대로 순열뽑아 결과에 합침.

결과중에 최댓값의 0.5 제곱을 뽑아 for문 돌림. 

for문 내부에서 i값*2 ~ 결과중 최댓값까지 있는 배열을 제외

 (i의 값이 2면 [4,6,8,10 ..] 제외)

 

a = set([1,4])
b = set([1,2,3])
a |= b //{1, 2, 3, 4} 합집합

 

b = set(range(0,2)) // {0,1}

b = set(range(2)) // {0,1}

a -= set(range(0,2)) // 여집합 {4}

 

a=2 b=3

a**b //8. 2의 3제곱

 

 

반응형