[プログラマー]通報結果を得る


これはプレイヤー間の通報結果を計算するコードです.

22-04-02 code

from collections import Counter

def solution(id_list, report, k):
    #'''
    #id_list = str
    #report = str str
    # k = int
    #'''
    warninglist = list(set(report))
    warningfrom = [wl.split()[0] for wl in warninglist]
    warningto = [wl.split()[1] for wl in warninglist]

    warninguser = [key for key,value in Counter(warningto).items() if value >= k]
    final_list = [wl.split()[0] for wl in warninglist if wl.split()[1] in warninguser]

    answer =[]

    mailcount = Counter(final_list)
    for uid in id_list:
        if uid in mailcount.keys():
            answer.append(mailcount[uid])
        else:
            answer.append(0)

    return answer
collectionライブラリのcounter関数を使用して、ユーザーごとに受信したクレームの回数を計算します.
Tip.
1.response=[0]*len(id list)で始まる
2.Collection Counterを無効にします.

22-04-04 code

def solution(id_list, report, k):
    
    # answer default
    answer = [0]*len(id_list)
    
    # delete duplicated warnings
    report_rep_del = list(set(report))
    
    # List warned users up 
    warning_list = [warning.split()[1] for warning in report_rep_del]
    warning_list_final = []
    for wl in list(set(warning_list)):
         if len([wl for w_l in warning_list if w_l == wl]) >= k:
                warning_list_final.append(wl)
    
    # List warning users up
    warning_mail_list = [rrd.split()[0] for rrd in report_rep_del if rrd.split()[1] in warning_list_final]
    
    i = 0
    for uid in id_list:
        answer[i] = len([wml for wml in warning_mail_list if wml == uid])
        i += 1
        
    return answer
if for if構造を用いて解決した.