본문 바로가기
프로그래머스/lv.2

소수 찾기

by bingual 2024. 2. 27.
반응형

 

https://school.programmers.co.kr/learn/courses/30/lessons/42839

 

프로그래머스

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

programmers.co.kr

문제풀이

1! ~ 7! 까지 모두 더한 결과는 Σ(i=1 to 7) i! = 5913이 된다. 코드 특성상 지수 시간복잡도를 가지게 되지만 n이 최대 7까지만 주어지기 때문에 모든 경우의 순열을 구하고 소수 판별을 진행할 수 있다.

 

해당 문제와 같은 문제들에서 주의해야 할 점은 먼저 주어진 시간 내에 탐색이 가능한지부터 판단을 하고 불가능하다면 그리디 방법을, 그것 또한 불가능하다면 DP를 활용해서 풀이해야 한다.

 

  • permutations를 이용하여 1부터 7까지의 모든 순열을 구해준다. permuations는 튜플 형태로 반환하기 때문에 각 반환결과를 이어 붙여서 정수로 변환한 뒤 요소를 배열에 확장해 준다.
  • 중복되는 요소가 있을 수 있기 때문에 중복제거를 해준 뒤 n의 제곱근까지만 탐색을 하여 소수 판별을 진행한다.
from itertools import permutations


def solution(numbers):
    answer = 0

    convert = []
    for i in range(1, len(numbers) + 1):
        convert.extend([int("".join(comb)) for comb in permutations(numbers, i)])

    for num in set(convert):
        if primes(num):
            answer += 1

    return answer


def primes(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

'프로그래머스 > lv.2' 카테고리의 다른 글

큰 수 만들기  (0) 2024.02.29
두 큐 합 같게 만들기  (0) 2024.02.28
다리를 지나는 트럭  (0) 2024.02.27
2개 이하로 다른 비트  (0) 2024.02.26
2 x n 타일링  (0) 2024.02.26