[アルゴリズム][Phothon]プログラマー宝くじの最高と最低順位


質問する


2021 Dev-Martching:Webバックエンド開発者(上半期)|楽透の最高と最低ランキング

問題を解く

def solution(lottos, win_nums):
    lank = {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6} # 일치한(맞힌) 번호 갯수에 따른 순위 정보
    zero_cnt = lottos.count(0)
   
    min = len(set(lottos) & set(win_nums)) # 확실히 맞힌 원소의 개수 : 최저 순위
    max = min + zero_cnt # 최대한으로 맞혔다고 가정했을 때, 맞힌 원소의 개수 : 최고 순위

    return [lank[max], lank[min]] # 최고 순위, 최저 순위
print(solution([45, 4, 35, 20, 3, 9],[20, 9, 3, 45, 4, 35]))
  • lank:宝くじ番号が6つに固定されているため、ランキング情報はディクソン語で表現できる.一致する要素の数が1つまたは0の場合、6番目のビットとしてマークされます.
  • zero_cnt:宝くじリストで0の数字をカウントします.
  • min:2つのリストの中で、共通要素の個数で、リストごとに集合して交点を求める.これは最下位を求めるために使う鍵です.
  • max:アライメントエレメントにゼロ個加算これは最高順位を求めるために使う鍵です.0は知らない数字で表記されているので、0が正しい数字だと仮定して最高順位を求める.
  • lank[max], lank[min]:min、maxをキーに並べ替えます.
  • 新知


    交差を使いたいのですが、何の記号か覚えていないので、グーグルにしました.
    交差は「&」を使用します!
    min = len(set(lottos) & set(win_nums))