k次大数


作成日:2022年1月6日午前1:25

インプリメンテーションコード

# k번째 큰 수
import sys
sys.stdin = open("input.txt", "rt")
n, k = map(int, input().split())
numList = list(map(int, input().split()))
sumList = []
for i in range(n):
    for j in range(i+1, n):
        for l in range(j+1, n):
            num = numList[i]+numList[j]+numList[l]
            sumList.append(num)
sumList.sort(reverse=True)

count = 0
predNum = 0
for num in sumList:
    if predNum != num:
        count += 1
        predNum = num
    if count == k:
        print(num)
        break

模範解答

# k번째 큰 수
import sys
sys.stdin = open("input.txt", "rt")
n, k = map(int, input().split())
numList = list(map(int, input().split()))
sumList = set()
for i in range(n):
    for j in range(i+1, n):
        for l in range(j+1, n):
            num = numList[i]+numList[j]+numList[l]
            sumList.add(num)
sumList = list(sumList)
sumList.sort(reverse=True)
print(sumList[k-1])

差異

  • 私が実装したコードでは,重複する数字(num)があってもsumListに入れ,for文でk番目の大数の構造を検索すると,「模範解答」にset資料構造が用いられる.
  • セットには重複値は含まれていません.◇重複値を追加しようとすると、
  • が自動的にフィルタリングされる
  • setを使用すると、for文を使わずにリストからk番目の大きな数を直接出力できます.