본문 바로가기
프로그래머스/Python

[프로그래머스] 소수 찾기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 10. 11.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

해당 문제는 문자열로 입력된 숫자를 가지고 소수가 가능한 모든 숫자의 조합을 만든다.

모든 숫자의 조합을 구했으면 각 숫자를 하나씩 가져와 소수인지 판별한다.

모든 숫자의 조합을 만들 때는 순열(permutations) 함수를 활용해 각 자리별로 가능한 조합을 구한다.

 

  1. 가능한 숫자 조합을 구할 때 순열 함수를 사용하기 위해 permutations 모듈을 불러온다. from itertools import permutations
  2. 문자열로 입력받은 숫자를 개별로 모두 분리하여 리스트로 저장한다. num = list(numbers)
  3. 소수를 판단하기 전 가능한 모든 숫자의 조합을 저장할 리스트를 생성한다. li = list()
  4. 숫자는 1자리부터 처음 문자열의 길이의 자릿수만큼 가능하므로 자릿수를 반복하며 for i in range(1, len(num) + 1)
  5. 각 자릿수별로 만들 수 있는 숫자의 조합을 하나씩 불러온다. for j in list(permutations(num, i))
  6. 숫자를 문자열에서 분리했으므로 결과가 문자열의 리스트로 나온다. 하여 문자열을 결합하고 s = ''.join(j)
  7. 만약 결합한 숫자가 2 이상이면서 전체 숫자의 조합 리스트에 없다면 if (int(s) >= 2) and (int(s) not in li)
  8. 해당 수를 정수형으로 리스트에 추가한다. li.append(int(s))
  9. 조합으로 가능한 숫자를 모두 찾았으면 숫자를 하나씩 불러와 for i in li
  10. 우선 소수라고 판단하고 소수의 개수를 1 증가시킨다. answer += 1
  11. 그리고 2부터 자기 자신 전까지 수를 반복하며 for j in range(2, i)
  12. 나누어 떨어지는지 판단하고, 나누어 떨어지면 if (i % j == 0)
  13. 소수가 아니므로 소수의 개수를 1 감소시킨다. answer -= 1
  14. 소수가 아닌 것이 판별되었으므로 판별을 종료한다. 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
반응형