Just Fighting

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

Algorithm/코딩테스트 연습

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

yennle 2022. 6. 15. 12:02
728x90

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

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

 

 

< 문제 설명 >

주어진 배열에서 숫자 3개를 더했을 때 소수가 되는 경우의 개수를 리턴하라.

 

 

< 문제 이해 >

itertools의 combinations를 사용하면 될 것이라고 생각했고,

문제를 쉽게 해결할 수 있었다.

 

 

< 문제 풀이 >

combinations를 이용해 숫자 3개의 조합을 모두 구하고, 그 조합의 합을 구했다.

그리고 소수를 판별하는 함수를 만들어 소수이면 answer += 1이 되도록 하였다.

import itertools

def solution(nums):
    answer = 0

    li = list(itertools.combinations(nums,3))
    li = [sum(combi) for combi in li]
    
    for num in li:
        answer += 1 if primeNum(num) else 0
                
    return answer


def primeNum(num):
    for i in range(2,num):
        if num % i == 0:
            return False
        
    return True

 

 

< 풀이 개선 >

위에서 함수를 만들기 전에 원래는 아래 코드처럼 바로 소수임을 판별하는 코드를 넣고 싶었는데,

소수가 아닐 경우에 카운트 하는 방법을 어떻게 구현해야할지 몰라 함수를 만들어서 구현했다.

문제를 해결한 뒤에 다른 사람들의 풀이를 보고 for문 뒤에 else를 쓰면 for문이 끝난 뒤에 else문을 실행한다는 것을 알게 되었다(break문 등으로 빠져나가지 않는 경우에만). 

import itertools

def solution(nums):
    answer = 0

    li = list(itertools.combinations(nums,3))
    li = [sum(combi) for combi in li]
    
    for num in li:
        for i in range(2,num):
            if num % i == 0:
                break
        else:
            answer += 1
                
    return answer

 

 

728x90

'Algorithm > 코딩테스트 연습' 카테고리의 다른 글

[프로그래머스] 예산  (0) 2022.06.15
[백준] 수 정렬하기 2  (0) 2022.06.13
[백준] 수 정렬하기 3  (0) 2022.06.06
[백준] 뒤집힌 덧셈  (0) 2022.06.02
[백준] 운동  (0) 2022.05.26
Comments