소수

박진은·2023년 5월 1일
0

코테

목록 보기
31/44
def solution(numbers):
    
    answer = 0
    numbers = list(numbers)
    
    def check(num):
        if num != 0 and num != 1:
            for i in range(2,num):
                if num % i == 0:
                    return False
            return True
        else:
            return False
    
    def pickNum(middle_string, visited, numbers):
        
        nonlocal answer
        
        if int(middle_string) not in visited:
            visited.append(int(middle_string))
            num = int(middle_string)

            if check(num):
                answer +=1
                
        for i in numbers:
            new = middle_string
            new = middle_string + i
            new_numbers = numbers[:]
            new_numbers.remove(i)
            if new not in visited and len(new_numbers) >= 0:
                pickNum(new, visited, new_numbers)

                        
                        
    visited = []
    
    for i in numbers:
        new_numbers = numbers[:]
        new_numbers.remove(i)
        pickNum(i,visited,new_numbers)
        
    return answer
    

소수

  • 소수 문제라고 만만하게 봤다가 어려웠다. 순열과 조합을 구하는 것이 어려웠다. 나는 dfs 를 이용해서 풀었지만 더 좋은 코드가 있어서 보고 배웠다.
 import itertools

pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3개의 원소로 순열 만들기
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2개의 원소로 순열 만들기

위의 코드는 itertools 를 이용하는 method 이다 하지만 이 방법은 마음에 들지않았다.

profile
코딩

0개의 댓글