문제
https://programmers.co.kr/learn/courses/30/lessons/42839
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr
문제 풀이
첫번째 난관
주어진 원소들로 만들 수 있는 정수들을 만드는 것이 문제였다.
이 때 permutations 함수를 이용했다.
from itertools import permutations
처음 사용하는 모듈이였는데, 알아야 하는 유용한 모듈이였다.
이 사이트를 이용해 사용했다.
https://blog.naver.com/hunii123/222322576767
result = list(map(''.join,permutations(numbers, i)))
for문 속에서 i를 늘려가며 만들 수 있는 순열길이를 늘렸다.
두번째 난관
011, 11을 같게 만들어야 한다. 즉, 중복을 제거해야한다.
이 때 set()을 이용했다. 집합의 메소드로 set()으로 묶으면 중복이 사라진다.
1. 소수 판별함수에 넣기전에, set() 함수를 이용해 중복을 없앴다.
2. 소수 판별함수에 넣을 때 int변환되어 들어가므로 그 것을 이용했다.
다시 말해 011, 11은 모두 11으로 들어가는 점을 이용했다.
나온 값을 곧바로 answer값에 append하여, answer 출력 전 set 함수를 이용해 중복을 없앴다.
for j in list(set(result)):
# print(j)
if is_sosu(int(j)):
answer.append(int(j))
from itertools import permutations
def is_sosu(num):
if num < 2:
return False
for i in range(2,num):
if num % i == 0:
return False
return True
def solution(numbers):
all_per = []
len_num = len(numbers)
answer = []
for i in range(1,len_num+1):
result = list(map(''.join,permutations(numbers, i)))
for j in list(set(result)):
# print(j)
if is_sosu(int(j)):
answer.append(int(j))
answer = set(answer)
answer = len(answer)
return answer
# 순열 함수
# set 함수 : 중복 원소 제거
'programming language > Algorithm' 카테고리의 다른 글
[SQL NULL] 프로그래머스 NULL 처리하기 (0) | 2022.03.17 |
---|---|
[SQL GROUP BY] 프로그래머스 고양이와 개는 몇 마리 있을까, 동명 동물 수 찾기, 입양 시각 구하기 (0) | 2022.03.17 |
[Divide and Conquer 예제] 프로그래머스 Level3 네트워크 (0) | 2021.08.25 |
[Divide and Conquer 예제] 프로그래머스 Level2 타겟넘버 (0) | 2021.08.25 |
Branch and Bound (0) | 2021.08.20 |