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
- 함수
- 프로그래머스
- 스택/큐
- John Sonmez
- 조합
- permutations
- 코딩테스트
- deque
- boolean
- enumerate
- 2020 채용
- 탈출 조건
- 파이썬
- 변수명
- 그리디
- 중첩
- min heap
- 임시 변수
- 대소 비교
- 힙
- 중첩문
- 커리어
- max-heap
- 가독성
- 부등호
- 매직 넘버
- ZIP
- 중간 변수
- 가이드
- 함수화
Archives
- Today
- Total
Better Code, Better Life
소수 찾기 - 프로그래머스 - 파이썬 풀이 본문
문제 풀이
문제 자체는 매우 간단합니다.
예시도 두 가지로 직관적입니다.
하지만 숫자 길이가 길어지면 시간 초과가 날 확률이 높습니다.
따라서 문제를 잘 이해하고 최적화할 부분을 찾는게 중요합니다.
풀이 과정
- 소수가 될만한 후보를 찾습니다.
- 완전 탐색이 여기서 쓰입니다.
- permutations
- 완전 탐색이 여기서 쓰입니다.
- 이 후보가 소수인지 확인합니다.
- 이 부분을 최적화해야 합니다!!
- 소수인지 판별하는 다양한 알고리즘을 구현해 이 부분만 수정합니다.
- 이런 기본적인 함수는 인터넷에 최적화 되어있는 코드가 많이 있습니다. 검색해서 활용합시다!
클린 코드 작성법
- 변수명을 고쳐 문제의 이해력을 높입니다.
- number_string
- 문제의 단계별로 함수화합니다.
- get_candidates
- check_prime
- 문제를 풀어나갈 때, 과정을 잘게 쪼개면 최적화하기 쉽습니다.
- 오래 걸리면서 반복적으로 쓰이는 check_prime 함수만 최적화하면 됐습니다.
해답 코드
from itertools import permutations
import math
def solution(numbers):
number_string = numbers
number_list = []
for string in number_string:
number_list.append(int(string))
candidates = get_candidates(number_list)
prime_count = 0
for candidate in candidates:
is_prime = check_prime(candidate)
if is_prime:
prime_count += 1
return prime_count
def get_candidates(number_list):
candidates = []
length = len(number_list)
for r in range(1, length + 1):
candidates += permutations(number_list, r)
final_candidates = set([])
for candidate in candidates:
transformed = tuple_to_int(candidate)
final_candidates.add(transformed)
return final_candidates
def tuple_to_int(tuple_):
result = 0
digit = 1
for integer in tuple_:
result += integer*digit
digit *= 10
return result
def check_prime(number):
if number <= 1:
return False
if number % 2 == 0 and number > 2:
return False
return all(number % i for i in range(3, int(math.sqrt(number)) + 1, 2))
도움이 됐다면 공감버튼을 눌러주세요! 질문이 있다면 댓글 달아주세요!
코딩테스트 연습 - 소수 찾기 | 프로그래머스
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자만으로 이루어져 있습니다. 013은 0, 1, 3 숫자가 적힌 종이
programmers.co.kr
'Coding Test > Programmers' 카테고리의 다른 글
카펫 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.26 |
---|---|
숫자 야구 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.22 |
모의고사 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.17 |
이중우선순위큐 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.15 |
디스크 컨트롤러 - 프로그래머스 - 파이썬 풀이 (0) | 2019.08.13 |
Comments