Level 1. 小数を作成


03.小数を作る


コーディングテスト練習>Summer,Winter Coding(~218)>小数点の作成
https://programmers.co.kr/learn/courses/30/lessons/12977

問題の説明


与えられた数字のうち3つの数字を小数に加算すると、個数を求めてみます.数値を持つ配列numsをパラメータとする場合は、solution関数を完了してnumsの3つの異なる数値の小数を返します.

せいげんじょうけん


・numsの数字の個数は3個以上50個以下である.
・numsの各要素は1以上1000以下の自然数であり、重複する数字は含まれていない.

I/O例


nums = (1,2,3,4) result = 1

構想する


  • itertoolsのコンビネーションライブラリを使用して、与えられた数値の3つを加算し、リストを形成します.

  • リスト内の要素(リスト)の合計を2から要素値で除算します.
    2-1. 分離が発生した場合は、次の要素に移動します.
    2-2. 分離しない場合はresultを+1します.
  • 解答方法


    構想的な方法で解く

    from itertools import combinations
    def solution(nums):
        count = 0
        sums = itertools.combinations(nums,3)
    
        for i in sums:
            num = sum(i)
            for j in range(2,num):
                if num % j == 0:
                    break
            else:
                count +=1
        return count

    エラトステネスのふるい方法

    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)])