[programmers/CodingTest/Python]宝くじの最高と最低ランキング


問題の説明


楽透6/45(以下「楽透」と略称する)は典型的な宝くじで、1~45の数字に6つ印刷して推測することができる.次は宝くじのランキングを決める方法です.
순위	당첨 내용
1	6개 번호가 모두 일치
2	5개 번호가 일치
3	4개 번호가 일치
4	3개 번호가 일치
5	2개 번호가 일치
6(낙첨)	그 외
宝くじを購入したミンウは、当選番号の発表日を楽しみにしていた.しかし、敏宇の弟は宝くじに落書きをして、番号の一部が分からなくなった.当選番号が発表された後、敏宇は自分が購入した宝くじの当選の最高順位と最低順位を知りたいと思っています.
購入した6つの宝くじ番号が44、1、0、0、3125だとします.6つの当選番号がそれぞれ31、10、45、1、6、19の場合、当選可能な最高および最低の例は以下の通りである.
당첨 번호		31	10	45	1	6	19	결과
최고 순위 번호	31	0→10	44	1	0→6	25	4개 번호 일치, 3등
최저 순위 번호	31	0→11	44	1	0→7	25	2개 번호 일치, 5등
順序が
  • であれ、購入した宝くじに当選番号に該当する番号があれば、正解と認定されます.
  • では、2つの非表示の番号がそれぞれ10と6であると仮定すると、3位になります.
    ->3位を作る方法は他にもあります.しかし、私たちはそれを2位以上にすることはできません.
  • は、11と7の2つの知らない番号を持っていると仮定し、5位になります.
    ->5位を作る方法は他にもあります.しかし、彼を6位にすることは不可能だ.
  • パラメータは敏宇が購入した宝くじ番号を含む宝くじ、当選番号の宝くじである.このとき、可能な最高順位と最低順位を配列に順番に入れて戻ります.

    せいげんじょうけん

  • lottosは整数配列で、長さは6です.
  • lottosのすべての要素は45以下の整数です.
    ->0は認識できない数字を表します.
    ->0以外の数字はlottosで2つを超えません.
    ->lottosの要素が整列していない可能性があります.
  • win numsは長さ6の整数配列である.
  • win numsのすべての要素は45より大きい整数です.
    ->win numsには2つ以上の同じ数字は含まれていません.
    ->win numsの要素が整列していない可能性があります.
  • I/O例

    lottos			win_nums			result
    [44, 1, 0, 0, 31, 25]	[31, 10, 45, 1, 6, 19]		[3, 5]
    [0, 0, 0, 0, 0, 0]	[38, 19, 20, 40, 15, 25]	[1, 6]
    [45, 4, 35, 20, 3, 9]	[20, 9, 3, 45, 4, 35]		[1, 1]

    I/O例説明


    I/O例#1
    問題の例を以下に示します.
    I/O例#2
    下に読めない番号があれば、一等賞と六等賞に当たってもいいです.
    당첨 번호		38	19	20	40	15	25	결과
    최고 순위 번호	0→38	0→19	0→20	0→40	0→15	0→25	6개 번호 일치, 1등
    최저 순위 번호	0→21	0→22	0→23	0→24	0→26	0→27	0개 번호 일치, 6등
    I/O例#3
    敏宇が購入した宝くじの番号と当選番号が一致したため、最高順位と最低順位が1位だった.
    実際に使われている宝くじのランキング方式とは少し違いますが、本問題では指紋の説明に従って宝くじのランキングを確定します.

    方法


    問題で定義した順序は7-(正しい番号)です.ここでは0を最良,最悪の場合に分けて,正しい番号の個数,0の個数を求めて解決する.
  • の正しい番号の個数を格納する変数cntは0として定義される.
  • lottos変数0は
  • 0の個数を格納する.count(0)を使用して定義します.
  • lottosを調べ、win numsに同じ数字があればcntは1増加します.
  • 最適定義は7−(cnt+zero)、最悪定義は7−cntである.
  • cntが2未満の場合、最悪は6に固定される.
  • cntが2未満、0が0の場合、最適な固定度は6である.
  • solution.py

    def solution(lottos, win_nums):
        answer=[]
        cnt=0
        zero=lottos.count(0)
        for i in lottos:
            if i in win_nums:
                cnt+=1
        best=7-(cnt+zero)
        worst=7-cnt
        if cnt<2:
            worst=6
            if zero==0:
                best=6
        answer.append(best)
        answer.append(worst)
        return answer