본문 바로가기

Development/CodingTest

[완전탐색] 프로그래머스 level 2 소수 찾기 Python 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/42839?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 접근

  • 일단 모든 만들 수 있는 숫자를 생성해야 함 -> 순열
  • 소수 판별하는 함수를 만들어야함

Java로 구현하려 했으나..

자바에서 순열을 연산해 주는 라이브러리가 없는 것 같아서

https://github.com/TheAlgorithms/Java/blob/c527dff92da2046b850ffe9a3b8d0c2aae15d588/src/main/java/com/thealgorithms/backtracking/Permutation.java#L32

위처럼 백트래킹 구현을 해주어야 하는데... 물론 하면 좋지만 라이브러리를 갖다 쓰면 되는 파이썬이 시간과 코드 길이도 줄이기 너무 좋은 것 같아요

파이썬이 코딩테스트 보기에 참 좋은 언어라고 생각이 드네요

코드

from itertools import permutations

def solution(numbers):
    answer = 0                                 
    nums = [n for n in numbers]        
    per = []                                      
    for i in range(1, len(numbers)+1):  
        per += list(permutations(nums, i)) 
    per_nums = set(int("".join(num)) for num in per)
    
    def check_prime_number(num):
        if num < 2:
            return False
        for i in range(2, int(num**0.5) + 1):
            if num % i == 0:
                return False
        return True
    
    for number in per_nums:
        if check_prime_number(number):
            answer += 1
        
    return answer