[プログラマー/レベル2/ハイスコアスイート]小数(C++)(Python)を検索


[プログラマー/レベル2/ハイスコアスイート]小数(C++)(Python)を検索

1.質問



2.アクセス/チェックポイント

  • で与えられた文字列(numbers)からなるすべての数値の組合せを探します.
  • 可能なすべての組合せについて、小数であると判断し、小数である場合は個別のリストに分離します.
  • リストから重複データを削除すると、残りの数が正しい.
  • 3.解決方法


    どの数が小数であるかを判断する関数を定義します.(check_num)
  • 1からデジタル長(len(numbers))まで組合せ数を増やし、可能なすべての組合せを探します.
    2-1. 1つの数字の組み合わせ、2つの数字の組み合わせ......len(numbers)様々な数字の組み合わせ.
    2-2. 各組合せステップでは、join()関数を使用してリスト内の要素を結合し、各要素をint型に変換します.
    ex)join関数を使用してリスト内の要素(tuple)を文字列に結合するプロセス
    1つの数字で構成されたリスト=[("1",),("2",),("3",)]=>["1","2","3"]
    2つの数字を組み合わせたリスト=[("1","2"),("2","3"),("3","1")]=>["12","23","31"]
    2-3. check num関数を使用して、変換後の数字が小数であるかどうかを判断します.
  • の小数であれば、tmpリストに追加されます.
  • set()関数を使用して
  • の最終tmpリストをセットに変換し、重複を除去します.
  • 重複除外、残りの要素数回答
  • 4.完全なコード


    1.Pythonコード

    from itertools import permutations
    import math
    
    
    def check_num(num):
        
        if num < 2:
            return False
        else:
            # 2부터 해당수의 제곱근까지 나눠서 소수인지 확인 
            for i in range(2, int(math.sqrt(num))+1):
                if num%i == 0:
                    return False
            return True
    
    
    def solution(numbers):
        answer = 0
        tmp = []
        
        # numbers를 1개 ~ len(numbers)개까지 조합
        for i in range(1, len(numbers)+1):
            arr = list(permutations(numbers, i))
            for j in range (0, len(arr)):
                # i개를 조합시켜 생성된 리스트의 각 원소를 join후 int로 형변환
                num = int(''.join(arr[j]))
                # num이 소수 인지 확인, 소수이면 answer[]에 추가
                if check_num(num) :
                    tmp.append(num)
        
        # answer리스트를 set(집합)으로 바꿔서 중복 제거 후 남은 갯수가 정답
        answer = len((set(tmp)))
            
    
        return answer

    2.C++コード


    追加

    5.注意事項


    👉 Pythonでシーケンスを求める方法、置換()関数


    ソートは、n個の要素にr個の要素を順番にリストします。


    📌 Pythonの順序関数の使い方:配列(重複可能オブジェクト、選択する項目数)

    from itertools import permutations 
    a = ['A','B','C']
    per_list = permutations(a,2)  #리스트 a에서 순서 상관없이 2개 선택해서 조합
    #결과 :  [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

    👉 Pythonのjoin()、split()関数


    1.split()関数:文字列を()の区切り文字から区切り、リストに戻る関数。


    📌 split()関数の使い方:文字列。split(「区切り文字」)


    ex)
    a = "2021-06-23"  
    b = list(a.split('-')) 
    #결과 : ["2021", "06", "23"]

    2.join()関数:リストを文字列に結合する関数


    📌 join()関数の使い方:「区切り文字」。join(リスト)


    ex)
    a = ['A', 'B', 'C']
    b = list(''.join(a))   #구분자가 공백인 경우
    c = list('_'.join(a))  #구분자가 _ 인 경우
    #결과 b = "ABC" , c = "A_B_C"

    6.他の方法を試みる


    追加

    7.後期


    数列、組合せ関数はよく使われるので、まず使い方を熟知します.