데이터사이언스 기록기📚

[프로그래머스] Level 1_소수 만들기 본문

Coding Test/프로그래머스(Python)

[프로그래머스] Level 1_소수 만들기

syunze 2022. 7. 12. 23:51

문제 유형

Summer/Winter Coding(2018~)

 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12977

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

나의 문제 풀이

1. itertools, 소수 찾기 알고리즘

 - 조합 이용하기 위해 itertools combinations 이용

 - 소수 찾기 알고리즘 코드 기억하기

from itertools import combinations

def solution(nums):
    answer = 0
    num_sum = []
    num = list(combinations(nums,3))
    
    for i in range(len(num)):
        num_sum.append(sum(num[i]))
        
    for j in num_sum:
        for i in range(2,j):
            if j % i == 0:
                break
        if j - 1 == i:		# break 빠져나온 소수 아닌 것들 걸러내기 위함(루프 다 돌고 나온 숫자 == j-1)
            answer += 1
            
    return answer

 

2. itertools, sympy 이용

 - 프로그래머스는 sympy 모듈을 지원하지 않는다ㅠ

 - sympy의 isprime() 함수를 이용하면 소수 판별해준다.

from itertools import combinations
from sympy import *

def solution(nums):
    answer = 0
    num_sum = []
    num = list(combinations(nums,3))

    for i in range(len(num)):
      num_sum.append(sum(num[i]))

      #판별하기
    for j in num_sum:
      if isprime(j) == True:
        answer += 1

    return answer

 

다른 사람들의 문제풀이

1. 나의 풀이와 유사

- for - else문 : else문을 for문과 같은 줄에 쓰면, for문의 반복이 끝나고나서 else문 실행(break로 빠져나가지 않는다면)

  • for문과 함께 쓰는 else는, for문이 중간 break등으로 끊기지 않고 끝까지 수행되었을 때 수행하는 코드
    https://harryp.tistory.com/317
 

[Python] 파이썬 for-else 문

안녕하세요. 파이썬에 있는 편리한 문법인 for-else 문에 대한 포스팅 입니다. 보통 프로그래밍 언어에서 'else'라고 하면 if와 함께 오는 경우가 거의 대부분입니다. 하지만 파이썬에서는 for 문과도

harryp.tistory.com

from itertools import combinations as cb

def solution(nums):    
    answer = 0
    
    # 조합 3개 묶어서 바로 이용
    for a in cb(nums, 3):
        cand = sum(a)
        # 소수인지 판별
        for j in range(2, cand):
            if cand%j==0:
                break
        else:
            answer += 1
    return answer

 

2. 에라토스테네스의 체와 유사

 - prime_number() : answer == 1이면 1로만 나누어 지는것, answer가 1보다 크면 소수가 아님 -> 1인 경우만 소수로 판별

from itertools import combinations

def prime_number(x):
    answer = 0
    for i in range(1,int(x**0.5)+1):
        if x%i==0:
            answer+=1
    return 1 if answer==1 else 0

def solution(nums):
    return sum([prime_number(sum(c)) for c in combinations(nums,3)])

 

3. 에라토스테네스의 체

https://subinze.tistory.com/67?category=935075 

 

[프로그래머스] Level 1_소수 찾기

유형 연습문제 문제 https://programmers.co.kr/learn/courses/30/lessons/12921 코딩테스트 연습 - 소수 찾기 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수..

subinze.tistory.com

 

리뷰

- n개씩 선택해서 계산 : from itertools import combinations

- 소수 찾기 알고리즘 : 에라토스테네스의 체, 해당 코드, sympy의 isprime()

- for - else문 :  break로 멈춰지지 않고 한 번 더 판별해야할 때

728x90
Comments