プログラマレベル2「小数点を検索」


質問する


少数のプログラマーの検索

に答える


itertoolsの配列(シーケンス)を使用して、コンビネーション文字の数を検索します.
set資料型を用いて重複を解消する.
そして少数かどうかを判断すればいい!

エラトステネスのふるい


少数の人はエラトネスのふるいで救助した.

0과 1은 소수가 아니니 제외하고 2부터 시작한다.
2를 소수에 추가하고 2의 모든 배수를 지우고 난 후, 
3을 소수에 추가하고 지워지지 않은 3의 모든 배수를 지운다.
4는 이미 지워졌으므로 지나간다.
5는 지워지지 않았으므로 소수이며, 소수에 추가하고 5의 모든 배수를 지운다
.
.
.
このまま繰り返していくと、少数しか残っていません.
これはエラトステネスのふるいと呼ばれています.
ウィキペディア

Pythonコード

from itertools import permutations

def primeCheck(n):
  # 에라토스테네스의 채를 이용한 소수 리스트를 반환하는 함수
  checklist = [False,False] + [True]*(n-1)
  primes=[]

  for i in range(2,n+1):
    if checklist[i]:
      primes.append(i)
      for j in range(i*2, n+1, i):
          checklist[j] = False

  return primes

def solution(numbers):
  # itertools의 순열 메소드를 이용한 경우의 수 저장
  sets = []
  for i in range(1, len(numbers)+1):
    sets += list(permutations(list(numbers), i))

  # 문자열 이어 붙인 뒤 숫자로 자료형을 바꾸고 
  # set을 이용해 다시 한번 중복 제거 ('011'이 숫자형 11로 바뀌면서 생기는 중복 제거)
  numlist = []
  for x in sets:
    temp = ''
    for y in x:
      temp += y
    numlist.append(temp)

  numlist = list(set(list(map(int, numlist))))

  # 소수인지 확인
  primetable = primeCheck(max(numlist))
  answer = 0
  for k in numlist:
    if k in primetable:
      answer += 1

  return answer