[프로그래머스 Level2][Python] 소수 찾기

토끼는 개발개발·2021년 12월 23일
0

Programmers

목록 보기
53/68
post-thumbnail

[프로그래머스 Level1] 소수 찾기

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

문제설명 📖

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

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


제한사항

  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

입출력 예



문제접근 💡

  1. permutations 함수를 사용해 모든 경우의 수를 구한다.
  2. 중복을 제거한다. (set)
  3. 소수를 확인한다.

join() 함수

  • 문자열String 합치기
  • 특정 문자를 삽입하여 새로운 문자열로 합쳐준다.
a = ['a','b','c']
text = ''.join(a)
text2 = ','.join(a)
print(text)
print(text2)
#출력
abcd
a,b,c,d

map() 함수

  • map(function, iterable)은 함수(function)와 반복 가능한(iterable)자료형을 입력받는다.
  • 함수의 동작은 두 번째 인자로 들어온 반복 가능한 자료형(리스트나 튜플)을 첫 번째 인자로 들어온 함수에 하나씩 집어 넣어서 함수를 수행한다.
  • map(적용시킬 함수, 적용할 값들)
  • map 함수의 반환 값은 map 객체이기 때문에 해당 자료형을 list나 tuple로 형 변환시켜주어야 한다.
a = [1.2, 2.2]
text = list(map(int, a))
print(text)
#출력
[1,2]

문제풀이 💡

from itertools import permutations

def test(num):
    if num < 2:
        return False
    
    for k in range(2,num):
        if num % k == 0:
            return False

    return True
        

def solution(numbers):
    answer = []
    for i in range(1,len(numbers)+1):
        per = list(map(''.join,permutations(numbers,i)))
        for j in list(set(per)):
            if test(int(j)):
                answer.append(int(j))
                
    return len(set(answer))

해결점
1. join()을 사용해 [('7','1'), ('1','7')]로 나뉘어진 문자열을 ['71','17']로 만들었다.
2. 중복제거

profile
하이 이것은 나의 깨지고 부서지는 기록들입니다

0개의 댓글