728x90
반응형
1. 문제 설명
2. 풀이과정
해당 문제는 문자열로 입력된 숫자를 가지고 소수가 가능한 모든 숫자의 조합을 만든다.
모든 숫자의 조합을 구했으면 각 숫자를 하나씩 가져와 소수인지 판별한다.
모든 숫자의 조합을 만들 때는 순열(permutations) 함수를 활용해 각 자리별로 가능한 조합을 구한다.
- 가능한 숫자 조합을 구할 때 순열 함수를 사용하기 위해 permutations 모듈을 불러온다. from itertools import permutations
- 문자열로 입력받은 숫자를 개별로 모두 분리하여 리스트로 저장한다. num = list(numbers)
- 소수를 판단하기 전 가능한 모든 숫자의 조합을 저장할 리스트를 생성한다. li = list()
- 숫자는 1자리부터 처음 문자열의 길이의 자릿수만큼 가능하므로 자릿수를 반복하며 for i in range(1, len(num) + 1)
- 각 자릿수별로 만들 수 있는 숫자의 조합을 하나씩 불러온다. for j in list(permutations(num, i))
- 숫자를 문자열에서 분리했으므로 결과가 문자열의 리스트로 나온다. 하여 문자열을 결합하고 s = ''.join(j)
- 만약 결합한 숫자가 2 이상이면서 전체 숫자의 조합 리스트에 없다면 if (int(s) >= 2) and (int(s) not in li)
- 해당 수를 정수형으로 리스트에 추가한다. li.append(int(s))
- 조합으로 가능한 숫자를 모두 찾았으면 숫자를 하나씩 불러와 for i in li
- 우선 소수라고 판단하고 소수의 개수를 1 증가시킨다. answer += 1
- 그리고 2부터 자기 자신 전까지 수를 반복하며 for j in range(2, i)
- 나누어 떨어지는지 판단하고, 나누어 떨어지면 if (i % j == 0)
- 소수가 아니므로 소수의 개수를 1 감소시킨다. answer -= 1
- 소수가 아닌 것이 판별되었으므로 판별을 종료한다. break
반응형
3. 소스코드
from itertools import permutations
def solution(numbers):
answer = 0
num = list(numbers)
li = list()
for i in range(1, len(num) + 1):
for j in list(permutations(num, i)):
s = ''.join(j)
if (int(s) >= 2) and (int(s) not in li):
li.append(int(s))
for i in li:
answer += 1
for j in range(2, i):
if (i % j == 0):
answer -= 1
break
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 베스트앨범 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.20 |
---|---|
[프로그래머스] 쿼드압축 후 개수 세기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.18 |
[프로그래머스] 전력망을 둘로 나누기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.15 |
[프로그래머스] 기지국 설치 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.13 |
[프로그래머스] 다리를 지나는 트럭 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.09 |
[프로그래머스] 가장 큰 수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.07 |
[프로그래머스] 택배상자 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.05 |
[프로그래머스] 단속카메라 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.03 |