白駿1713.推奨候補(Python使用)


質問する


世界小学校の生徒会長候補は、しばらくの間、生徒全員の推薦で一定数に選定された.そこで、学校のウェブサイトに推薦された学生の写真をアップロードできるフォトフレームを作成しました.推薦された学生の写真をフォトフレームに公開し、推薦された回数を表示するルールは以下の通りです.
  • の学生が推薦を開始する前に、すべてのフォトフレームは空です.
  • ある学生はある特定の学生を推薦し、推薦された学生の写真はフォトフレームに貼らなければならない.
  • 空いているフォトフレームがなければ、これまでの推薦回数が最も少なかった学生の写真を削除し、そこで新しい推薦学生の写真を公開する.このとき、これまでの推薦回数が最も少なかった学生が2名を超えると、これらの学生の中で最も長く投稿された写真が削除される.
  • 現在、写真を投稿している学生が他の学生の推薦を受けると、推薦される回数が増えるだけです.
  • のフォトフレーム上の写真を削除すると、その学生が推奨される回数は0になります.
    推薦の順番によって候補者の数、すなわちフォトフレームの数と全学生の推薦結果を与える場合は、最終候補者が誰であるかを決める手順を立ててください.
  • 方法


    問題で提起された制約をよく守り,コードを記述した.
  • 大推薦学生番号は、すでにフォトフレーム内にある場合とそうでない場合に分けられます.
  • が既に写真枠に入っている場合は、その番号の生徒の投票数を1つ上げています.
  • とは対照的に、写真ボックスに写真がない場合は、写真ボックスの写真数が所定の数を超えているか否かに分けられる.
  • を超える場合、先頭から巡回投票数を開始し、最小投票数の生徒を削除する.
  • を超えない場合は、フォトフレームに追加し、スコアリストにも追加します.
    (リストは写真リストとスコアリストに分けて操作します.)
  • コード#コード#

    N = int(input())
    vote = int(input())
    students_num = list(map(int, input().split()))
    
    photos = [] # 사진 리스트 
    tmp = [] # 투표수 리스트
    
    for i in range(vote):
    	# 해당 학생의 사진이 이미 사진 틀에 있는 경우
        if students_num[i] in photos:
        	# 해당 학생을 찾아 투표수를 +1
            for j in range(len(photos)):
                if students_num[i] == photos[j]:
                    tmp[j] += 1
        # 사진틀에 없는 경우
        else:
        	# 사진 틀 개수가 꽉 찼다면
            if len(photos) >= N:
            	# 최소값을 찾아서 먼저 등록된 학생 삭제
                for j in range(N):
                    if tmp[j] == min(tmp):
                        del photos[j]
                        del tmp[j]
                        break
            # 아니라면 뒤에 그냥 추가
            photos.append(students_num[i])
            tmp.append(1)
    
    photos.sort()
    print(' '.join(map(str,photos)))