[Programmers코딩테스트] 완전탐색 - 소수 찾기

Alex of the year 2020 & 2021·2020년 8월 25일
0

Coding Test

목록 보기
2/3
post-thumbnail

제출한 코드 분석

from itertools import permutations
# permutations를 사용하기 위한 library import

def solution(numbers):
# 기능별로 함수를 분리해서 작성하는 것이 좋다 (def solution, def is_prime)
# 지금 작성하는 함수는 인자로 들어온 numbers 문자열을 list로, 그리고 순열을 이용하여 is_prime함수를 이용하여 소수인지 판별할 함수
    numbers = list(numbers)
    # 인자로 주어진 numbers를 list화 한다 --> 순열로 만들 때의 편리성 도모
    answer = 0
    # return해줄 answer 변수 미리 지정
    
    for n in range(1, len(numbers)+1):
    # range(a, b)는 b '미만'까지 그 범위로 인식하므로 len(numbers)+1
        tmp=set(map(''.join, permutations(numbers,n)))
        # numbers로 받은 숫자의 자리 수 개수만큼 for문을 돌며,
        # n=1일 때는 각 숫자를 일의자리만 있는 수로 인식하여 한 자리 수 순열 생성
        # n=2일 때는 각 숫자를 십의자리까지 있는 수로 인식하여 일의 자리 수와 십의 자리 수를 이용한 순열 생성
        # n=3일 때는 각 숫자를 백의자리까지 있는 수로 인식하여 일의 자리 수, 십의 자리 수, 백의 자리 수를 이용한 순열 생성
        # 이 과정을 numbers로 초기에 받은 숫자의 자리수만큼 반복
        # 그리고 생성한 순열들 중 중복 값이 있을 수 있어 set으로 처리 
        # ex. numbers = '2447'로 들어갈 경우, 두 번째 4와 세 번째 4는 다른 것으로 컴퓨터는 인식
        
        for i in tmp:
        # 그렇게 자리수별로 생성된 tmp set 요소를 돌며
            if i[0]!='0' and is_prime(int(i)):
            # 첫 시작을 0으로 하지 않고 그 요소를 int화하여 is_prime 함수에 돌렸을 때 True인 경우
                answer+=1
                # 우리가 찾는 바로 그 값이므로 경우의 수 하나 찾았다는 뜻으로 +1
    return answer
    # 그리고 그렇게 쌓인 answer 리턴

def is_prime(num):
# 소수인지 판별하는 함수
    if num<2:
        return False
    for i in range(2,num):
        if num%i==0:
            return False
    return True

Point

  1. 문제 조건에 문자열로 numbers가 주어진다고 했는데, list형태로 변환하여 시작하는 것
  2. itertools 모듈을 import하여 permutations 함수 사용하는 것
    (+ set(map(''.join, permutations(numbers,n))) )
  3. 소수 판별하는 is_prime 함수 사용하기 (+ 에라토스테네스의 체)
profile
Backend 개발 학습 아카이빙 블로그입니다. (현재는 작성하지 않습니다.)

0개의 댓글