일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- import re
- 코딩
- CodingTest
- 완전탐색
- Queue
- sql
- 시간복잡도
- 조합
- 데이터분석
- 코테
- 연습문제
- Level2
- mysql
- join
- lambda
- counter
- lv4
- 프로그래머스
- coding
- time complexity
- collections
- itertools
- programmers
- Stack
- coding test
- 파이썬
- BFS
- python
- 코딩테스트
- level4
- Today
- Total
ror_coding
[Programmers] 소수 찾기 - 42839 본문
728x90
permutations를 이용해서 숫자가 가질 수 있는 모든 조합을 set에 저장하기.
Question
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
numbers는 길이 1 이상 7 이하인 문자열입니다.
numbers는 0~9까지 숫자만으로 이루어져 있습니다.
"013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
Point
- 이중 for 문으로 availables를 완성했는데, map을 이용하여 for문 한 개로 availables를 만듦.
- 0과 1은 제외함. (range(0, 2))
- + 에라토스테네스의 체 알고리즘을 쓰는게 더 오래걸려서 단순 not sum() : cnt+=1 로 진행함.
Code
from itertools import permutations as perm
def solution(numbers):
answer, nums = 0, set()
for i in range(1, len(numbers)+1):
nums |= set(map(int, map("".join, perm(list(numbers),i))))
nums -= {0,1}
for num in nums:
if not sum(1 for i in range(2, int(num**0.5)+1) if num%i == 0): answer += 1
return answer
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/047.gif)
now me
On my github
728x90
'Algorithm > Python' 카테고리의 다른 글
[Programmers] 연속된 부분 수열의 합 - 178870 (0) | 2024.12.12 |
---|---|
[Programmers] 큰 수 만들기 - 42883 (0) | 2024.12.12 |
[Programmers] 가장 큰 수 - 42746 (0) | 2024.12.11 |
[Programmers] 2개 이하로 다른 비트 - 77885 (0) | 2024.12.11 |
[Programmers] 2 x n 타일링 - 12900 (0) | 2024.12.11 |