Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 주간회고
- 그리디
- Level2_PStage
- 알고리즘_스터디
- dp
- mrc
- 이코테
- 파이썬 3
- U_stage
- ODQA
- 단계별문제풀이
- Level2
- 백준
- 구현
- 개인회고
- 기술면접
- 백트랙킹
- dfs
- 알고리즘스터디
- 프로그래머스
- 이진탐색
- 그래프이론
- 정렬
- 글또
- Level1
- 부스트캠프_AITech_3기
- 최단경로
- 부스트캠프_AITech3기
- python3
- 다시보기
Archives
- Today
- Total
국문과 유목민
(Week4)[완전탐색/순열] 소수 찾기 본문
주간 코딩스터디 때 푼 문제들을 정리하고 있습니다. 구체적인 문제에 대한 정보는 게시글 내 링크를 살펴봐주세요
소요시간: 30분
1. 문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42839
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
한 자리 숫자가 적힌 종이조각들을 붙여서 소수를 몇 개 만들 수 있는지 알아내는 방법
2. 접근 방식
- 소수 판별 함수를 만든다.
- number들의 조합을 만들어서, 각 수에 대해 소수 판별을 진행한다.
- answer에서 True/False를 구분해서 answer에서 True인 것들만 리턴한다.
3. 코드
from itertools import permutations
def prime(n):
if n in (0, 1):
return False
for i in range(2, int(n**(1/2))+1):
if n % i == 0:
return False
return True
def solution(numbers):
num_ls = []
for i in range(1, len(numbers)+1):
num_ls.extend(list(permutations(numbers, i)))
answer_ls = list(set([int("".join(x)) for x in num_ls[1:]]))
answer = list(map(prime, answer_ls))
return answer.count(True)
4. 코멘트
- 순열 시 소수 판별 함수를 계속해서 구해야하기 때문에 시간복잡도에 걸릴 수도 있을 것 같다. 해당 문제의 경우 숫자의 개수가 9개이기 때문에 괜찮았지만, 나중에 더 커지면 효율성이 떨어질 수도 있다.
- 따라서 DP를 활용해서 max순열 숫자만큼 소수를 구해서 한번만 계산해, 리스트에서 참고할 수 있게 한다면 효율성을 조금 더 챙길 수 있어 보인다.
'알고리즘_코딩테스트 > 주간코딩 스터디 (주코스)' 카테고리의 다른 글
(Week5)[DP] N으로 표현 (0) | 2022.07.07 |
---|---|
(Week4)[소수찾기] 에라토스테네스의 체 (0) | 2022.07.07 |
(Week4)[그리디] 큰 수 만들기 (0) | 2022.07.07 |
(Week3)[구현] 순위검색 (0) | 2022.06.20 |
(Week3)[BFS] 타겟넘버 (0) | 2022.06.20 |