본문 바로가기
알고리즘

[python]programmers-소수찾기

by ujin2021 2021. 2. 26.

programmers.co.kr/learn/courses/30/lessons/42839

 

코딩테스트 연습 - 소수 찾기

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

programmers.co.kr

level2, 완전탐색 카테고리에 해당하는 문제이다.

 

문제를 풀기위한 단계

1. 주어진 수로 만들 수 있는 모든 수의 순열을 구한다

2. 순열을 차례로 검사하여 소수인지 판단한다

 

1번부터 어떻게 해야할지 막막했다. 검색을 해보니 python에서 순열을 만들어주는 함수가 있었다.

from itertools import permutations

numbers = '71'
for k in range(1, len(numbers)+1) :
	perlist = list(map(''.join, permutations(list(numbers), k)))
    print(perlist)

# ['7', '1']
# ['17','71']

 

71 즉 7과 1을 가지고 만들 수 있는 수는 1, 7, 17, 71이다.

list(map(''.join, permutations(list(numbers), k))) 를 하게되면 k길이에 해당하는 순열을 만들어준다.

1부터 numbers의 길이만큼의 조합을 모두 만들어야 하기때문에 for문을 사용해준다.

 

그냥 permutations(list(numbers), 2)를 하게된다면 [('1', '7'), ('7', '1')]의 결과가 나오기때문에 map과 ''.join으로 '1'과 '7'을 붙여 '17'로, '7'과 '1'을 붙여 '71'로 만들어준다.

 

참고 : velog.io/@dramatic/Python-permutation-combination-%EC%88%9C%EC%97%B4%EA%B3%BC-%EC%A1%B0%ED%95%A9

 

[Python] permutation, combination 순열과 조합

Python의 itertools를 이용하면 순열과 조합을 for문 없이 구현할 수 있다.

velog.io

풀이