IT recording...

[BOJ] 1713 후보 추천하기 - python 본문

Algorithm

[BOJ] 1713 후보 추천하기 - python

I-one 2021. 12. 2. 20:54

https://www.acmicpc.net/problem/1713

 

1713번: 후보 추천하기

첫째 줄에는 사진틀의 개수 N이 주어진다. (1 ≤ N ≤ 20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대

www.acmicpc.net

import sys

def input():
    return sys.stdin.readline().rstrip()

N = int(input())
M = input()
R = map(int,input().split())

candidate = {}

for i,r in enumerate(R):
    #액자가 가득 찼을 때
    if len(candidate) >= N and r not in candidate:
        #추천수가 가장 적으면서, 오래된거 삭제하기(dictionary에서 pop)
        sorted_cand = sorted(candidate.items(), key = lambda item: item[1][0])
        min_like = sorted_cand[0][1][1]
        delete_cand = sorted_cand[0]

        same_like_cand = []
        for cand in sorted_cand:
            if cand[1][1] == min_like:
                same_like_cand.append(cand[0]) #같은 애들 담음
        #오래된거 뽑기
        if len(same_like_cand) != 0:
            sorted_old_cand = sorted(same_like_cand)
            delete_cand = sorted_old_cand[0]

        #dictionary에서 delete_cand삭제하고, stack에서도 pop하기
        del candidate[delete_cand]

    #추천 수 올리기
    if r in candidate: #후보가 이미 있으면
        candidate[r][0] += 1
    else:
        tmp = [1,i]
        candidate[r] = tmp

#정답내기
answer = sorted(candidate.keys())
for a in answer:
    print(str(a) + " ", end='')

얻어가는 것

  • Dictionary Sorting하기
    • dict.items → 각 딕셔너리의 item들을 반환한다.
    • item[0]:key / item[1]:value
    my_dict = {'c': 3, 'a': 1, 'b': 2, 'e': 1, 'd': 2}
    
    #key를 기준으로 내림차순 정렬
    sorted_dict = sorted(my_dict.items(), reverse = True)
    print(sorted_dict)
    >>> [('a', 1), ('b', 2), ('c', 3), ('d', 2), ('e', 1)]
    
    #value를 기준으로 내림차순 정렬
    sorted_dict = sorted(my_dict.items(), key = lambda item: item[1], reverse = True)
    print(sorted_dict)
    >>> [('c', 3), ('b', 2), ('d', 2), ('a', 1), ('e', 1)]
    
    https://codechacha.com/ko/python-sorting-dict/
  • Dictionary 값 있는지 검사
    • key in dict 사용
    menu = {"ham" : 1, "cucumber" : -12, "egg" : 100}
    
    if "ham" in menu:
    	print "네, 찾는 것이 있네요"
    else:
    	print "그런 메뉴는 없습니다."
    
  • Dictionary key 값 list로
    dict.keys()
  • print 줄바꿈 없애기
    print("AngelPlayer", end='')
    
     

느낀점

"211003"

소요 시간 : 1H

  • 파이썬의 핵심 자료구조 dictionary, list에 대해서 알아볼 수 있는 시간이었다.

'Algorithm' 카테고리의 다른 글

[BOJ] 1039 교환 - python  (0) 2021.12.02
[BOJ] 1103 게임 - python  (0) 2021.12.02
[BOJ] 1932 정수 삼각형 - python  (0) 2021.12.02
[BOJ] 2098 외판원 순회 - python  (1) 2021.12.02
[BOJ] 1062 가르침 - python  (0) 2021.12.02
Comments