Kakao 2022ブラインド-通報結果を受け取る

7719 ワード

KAKAO 2022 BLIND RECRUITMENT:報告結果を得る


質問アドレス:https://programmers.co.kr/learn/courses/30/lessons/92334?language=python3
難易度:体感シルバー2

1.問題の説明

  • プログラマーのWebサイトを参照してください.
  • 大体
  • を要約して、ユーザーの間で互いに通報することができて、
  • 特定プレイヤーはk回以上の通報を受けて停止される.
  • および1人のプレイヤーが何度もあるプレイヤーを申告しても1回とみなされます.
  • この時点でプレイヤーが停止すると、そのプレイヤーを通報した人にメールが送信され、
  • ユーザーごとに何回メールを受信すればいいですか.
  • の入力はid list、report、kです.
  • reportは、前のユーザが後のユーザを通報したものである.
  • 2.問題を解決する考え。

  • のプレイヤーによって誰を通報したのか、成ディックのアカウントを保存し、またプレイヤーによって何度通報したのか、成ディックのアカウントも作成した.
  • それから繰り返し問い合わせることで、最終的に誰が止まるかを見つければいい.
  • 3.問題の処理方法

    from collections import defaultdict
        report_dict = defaultdict(set)  # 누가 누구를 신고했는지
        report_count = defaultdict(int)  # 신고를 몇번당했는지
    #두개의 딕셔너리 만들었습니다. defaultdict로 구현했습니다.
    #한명을 여러번 신고해도 한번으로 간주되기 때문에 set자료형을 이용할겁니다. 속도도 list에 비해 빠르기도 하고.
    #report를 반복문 돌려가면서 정보를 저장해줍니다.
    for case in report:  # 리포트의 케이스마다
            report_from, reported = case.split()  # 누가 누구를 신고했는지
            if reported not in report_dict[report_from]: #중복해서 신고한게 아니라면 
                report_dict[report_from].add(reported) #집합에 추가해줍니다.
                report_count[reported] += 1 #신고당한 횟수를 1 증가시켜줍니다.
    #정답을 완성시켜봅시다.
    for people in id_list: #userid별로
            cnt = 0
            for reported in report_dict[people]: #user가 신고한 사람들 순회하면서
                if report_count[reported] >= k: #그사람이 k번이상 신고당했으면
                    cnt += 1 #카운트 추가해줌
            answer.append(cnt) #정답에 추가

    4.特別注意事項

  • の精度だけをチェックして、時間の複雑さがどれほど高いか分かりません.
  • これは
  • ハッシュテーブルを用いて実現された問題であり,これまでに解いたココア問題の中で最も簡単な問題でもあるようだ.
  • 5.コード実装

    def solution(id_list, report, k):
        answer = []
        from collections import defaultdict
        report_dict = defaultdict(set)  # 누가 누구를 신고했는지
        report_count = defaultdict(int)  # 신고를 몇번당했는지
    
        for case in report:  # 리포트의 케이스마다
            report_from, reported = case.split()  # 누가 누구를 신고했는지
            if reported not in report_dict[report_from]:
                report_dict[report_from].add(reported)
                report_count[reported] += 1
    
        for people in id_list:
            cnt = 0
            for reported in report_dict[people]:
                if report_count[reported] >= k:
                    cnt += 1
            answer.append(cnt)
    
        return answer