Programmers Lv.2 소수찾기

iznue·2023년 12월 29일
0

Programmers

목록 보기
33/46
post-thumbnail
post-custom-banner

📚 문제 설명

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

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

🔥 제한 조건

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

입출력 예

numbers		return
"17"		3
"011"		2

📖 문제 풀이

  • numbers의 길이만큼 r 값을 지정하여 조합으로 모든 경우의 수를 찾음
  • 경우의 수 중 0으로 시작하는 경우 제거
  • 해당 값이 소수인지 판별

Code_1 - 실행 오류

import itertools, math
def prime(n):
    for i in range(2, int(math.sqrt(n)+1)):
        if n % i == 0:
            return False
    return True # 소수인 경우
def solution(numbers):
    answer = 0
    numbers = list(numbers)
    for r in range(1, len(numbers)+1):
        per = set(list(itertools.permutations(numbers, r)))
        for p in per:
            if p[0] != str(0):
                p = ''.join(p)
                if prime(int(p)) == True:
                    answer += 1
    return answer-1
  • 조합이 1인 경우를 제외하지 않아서 생긴 문제

Code_2 - 성공

import itertools, math
def prime(n):
    for i in range(2, int(math.sqrt(n)+1)):
        if n % i == 0:
            return False
    return True # 소수인 경우
def solution(numbers):
    answer = 0
    numbers = list(numbers)
    for r in range(1, len(numbers)+1):
        per = set(list(itertools.permutations(numbers, r)))
        for p in per:
            if p[0] != str(0):
                p = ''.join(p)
                if prime(int(p)) == True and int(p) != 1:
                    answer += 1
                    print(p)
    return answer
profile
₊˚ ⊹ ♡ https://github.com/iznue
post-custom-banner

0개의 댓글