개발 무지렁이

[문제풀이 py] P42839 소수찾기 본문

코딩 테스트/문제풀이 Python ver.

[문제풀이 py] P42839 소수찾기

Gaejirang-e 2023. 7. 4. 05:49

소수찾기 / 순열 🍔


  🎠. 'itertools 모듈'을 이용해 'permutations()' 내장 메서드를 이용할 줄 알아야 한다. => '순열'
  🎠. '리스트'를 '문자열'로 변환할 줄 알아야 한다. => ' "".join(list) '
  🎠. 리스트의 '중복을 제거'하는 방법을 알아야 한다 => 'dict.fromkeys(list)'
  🎠. '소수 찾는 알고리즘'을 구현할 줄 알아야 한다 => '에라토스테네스의 체'

Tistory's Card

  import itertools
  import math

  def is_prime(num):
      end = int(math.sqrt(num))
      for i in range(2, end+1):
          if num % i == 0:
              return False
      return True

  def solution(numbers):
      pieces = list(numbers)
      length = len(pieces)

      cnt = 0
      result = []
      for i in range(length):
          perm = itertools.permutations(pieces, i+1)
          arr = list(perm)

          for ele in arr:
              str = "".join(ele)
              num = int(str)
              if num != 0:
                  result += [num]
      result = list(dict.fromkeys(result))

      for ele in result:
          if ele > 1 and is_prime(ele):
              cnt += 1
      return cnt

💡. 문제 접근 방법
: 문자열을 쪼개 조합하는 과정에서 순서가 영향을 미치므로 순열을 이용해야 겠다고 생각했다.
permutation() 메서드를 이용하면 각 경우에 대한 쌍을 튜플형식으로 표현한 객체 리턴하는데,
이를 튜플을 원소로 하는 리스트변환해, 문자열로 바꿔주는 과정에서 많이 헤맸다.
그 후, 문자열을 int로 바꾸고 중복을 제거해 result라는 리스트에 넣어주었다.
소수 찾는 알고리즘은 '에라토스테네스의 체'를 이용해서 소수를 찾아주었다.

Comments