Algorithm

프로그래머스, 소수 찾기 [파이썬]

부산대보금자리 2021. 11. 9. 22:52

[ 문제 설명 ]

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

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요

 

입출력 예

numbers return

"17" 3
"011" 2

입출력 예 설명

예제 #1
[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.

예제 #2
[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.

  • 11과 011은 같은 숫자로 취급합니다.

[ 문제 풀이 ]

문제는 두 가지로 분해하여 생각할수 있다. 

소수를 판단하는 부분과 주어진 number로 나올수 있는 경우의 수를 구하는 것이다. 

기본 수학과정을 배웠다면 알겠지만 조합이 아닌 .. 순열으로 풀면 간단하다.

전처리만 해서 뽑아내어 내장 라이브러리에 적용해주면 나올수 있는 경우의 수가 깔끔하게 나온다. 

 

 

 

isprime함수는 위에 따로 선언해두었다. 

처음 val 리스트는 입력받은 numbers의 자리수에 따라서 나올수 있는 경우가 나오게 된다. 

예를 들면 "17"이 들어오면 아무리 해도 2자리숫자가 끝이다. 따라서 나올수 있는 1자리수, 2자리수 각각에 대한 순열 계산을 하여 val에 구한다.

이후 각각에 대한 prime판단 후  set에 넣어 중복을 해결한다.