본문 바로가기
  • 문과생의 백엔드 개발자 성장기
|Algorithm

[2주차]프로그래머스 Lv2 소수찾기(완전탐색) . PYTHON

by 케리's 2021. 6. 9.

문제 설명

 

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

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

 

 

 

제한사항

  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

 

 

입출력 예

numbers                                                  return

"17" 3
"011" 2

 

 

입출력 예 설명

 

 

예제 #1


[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.

 

예제 #2


[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.

  • 11과 011은 같은 숫자로 취급합니다.

 

 

 

😎 나의풀이

 

# 문제이해 : 숫자 조합의 모든 케이스 중, 소수가 몇 개인지 찾기
# 소수? 1과 자기자신만 약수로 가진 수

from itertools import permutations # 모든 경우의 수 찾기 (순열)


# 숫자 조합 중 소수의 갯수를 구해보자.
def cnt_prime(n_case):
    p_case = 0
    for i in n_case : # 숫자의 조합을 반복한 후
        cnt = 0 # 소수가 아닌 수의 갯수를 구할 변수
        for j in range (2,i): # 2부터 h-1까지 j에 담고
            if i % j == 0: # 숫자의 조합 i와 담은객체 j를 나눈값이 0일때
                cnt +=1 # 나누어 떨어지는게 있으면 cnt 에 갯수 더하고
                break # 멈춘다.
        if i > 1 and cnt == 0: # 나누어 떨어지는게 없고, 1보다 크면
            p_case += 1 # 소수리스트 객체에 갯수를 추가한다.
    return p_case #소수의 리스트 갯수를 구함

# 숫자 조합의 모든 케이스를 구해보자
def solution(numbers):
    n_case = []
    # ex) 1,2,3,4,5,6 .. 1과2조합, 2+3조합 등 만들려고
    for i in range (1,len(numbers)+1): # 1~ numbers 길이만큼 반복을 한 후 (ex, 1,2,3,4,5,6 ..)
        n_plus = permutations(numbers,i) # i가지 만큼 조합 구하기
        for j in n_plus:
            str_plus = "".join(j) # () 튜플을 벗어나게 한 후
            n_case.append(int(str_plus)) # n_case 리스트 객체에 담자.
    n_case = list(set(n_case)) # 중복제거, 순서는 뒤죽박죽됨
    return cnt_prime(n_case)

 

 

 

😃 다른풀이

 

from itertools import permutations # 모든 경우의 수 찾기 (순열)

def solution(numbers): #문자열 numbers를 순열로 만들자.
    r = []
    for i in range (1,len(numbers)+1):
        for j in permutations(list(numbers),i):
            h = int(''.join(j))
            for k in range(2,h): # 2 부터 h 까지 k에 담을 때
                if h % k == 0: # h % k 일때
                    break # 멈추고
            else:
                if h not in r and h !=0 and h != 1: # h가 
                    r.append(h)
    return len(r)

댓글