LoginSignup
0
0

More than 3 years have passed since last update.

【python】指定した値で割り算できるペアを求めるプログラム

Posted at

【python】指定した値で割り算できるペアを求めるプログラム

自分用のメモです。

▼設問

  • 正の整数の入ったlistが与えられる.(ar)
  • listから整数を2つ抜きだし、合計値がk(正の整数)で割り切れるペアの数を求める.

URL

▼sample input

k=3
ar=[1,3,2,6,1,2]

▼sample output

5

image.png

▼my answer

def divisibleSumPairs(n, k, ar):
    ans = 0

    for n,i in enumerate(ar):
        arr=[]
        arr =list(map(lambda x:(x+i)%k, ar[n+1:]))
        ans += arr.count(0)
    return ans

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')
    nk = input().split()
    n = int(nk[0])
    k = int(nk[1])
    ar = list(map(int, input().rstrip().split()))
    result = divisibleSumPairs(n, k, ar)
    fptr.write(str(result) + '\n')
    fptr.close()


考え方
  • 組み合わせの全パターンを出す。
  • 各要素をkで割った余りを求める。
  • 余り=0となった数を足し上げる。

▼一度かけ合わせた組み合わせは除外。

for n,i in enumerate(ar):
    print(ar[n+1:])

#------------------
[3, 2, 6, 1, 2]
[2, 6, 1, 2]
[6, 1, 2]
[1, 2]
[2]
[]

・map関数
map(関数,イテラブル)

イテラブルの要素を一つづつ抜き出し、関数を実行した値を返す。

▼こんなときに使う
・listの各要素をそれぞれn倍したい。
・lambda式と一緒に使われることが多い。
 └ lambda式:関数(def)を一文で書いたもの

▼処理
for文と関数が組み合わさった処理。

▼注意点
出力値はmap型。
listが欲しい場合は、list()で変換する。



・lambda式
defで定義する関数の簡略版。
メソッド名をつけず、引数と処理を一文で記述する。

lambda 引数:処理



・mapとlambda
map(lambda 変数:処理, イテラブル)

イテラブルの要素を一つづつ抜き出し、lambdaの変数に入れ処理を実行。この処理を各要素に対し行う。

・enumerate関数
・for文で使う
・インデックス番号を抜き出す

for 変数1, 変数2 in enumerate(イテラブル):
 └ 変数1:インデックス番号が入る。
 └ 変数2:抜き出した要素が入る。

▼こんなときに使う
・forが何回目の処理か知りたい。

英語が見慣れないのと長いので、難しそうだが実際は単純。

通常のfor文:「for 変数2 in イテラブル」
 ①index番号を入れる変数を追加(先方に書く)
 ②イテラブルをenumerateで囲む。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0