매일 매일 성장하는 섭섭군

[Seop's의 코드풀이] 백준 1713번 후보 추천하기 - Python 본문

알고리즘 문제풀이/백준

[Seop's의 코드풀이] 백준 1713번 후보 추천하기 - Python

섭섭군 2020. 5. 14. 17:20
반응형

이번에 풀어볼 문제는 백준 1713번인 후보 추천하기라는 문제입니다.

문제는 다음과 같습니다.

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

 

1713번: 후보 추천하기

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

www.acmicpc.net

 

이번 문제를 풀때 고려해야 할 점을 크게 두가지로 잡았다.

1. 액자에 걸린 추천수와 들어온 수서를  어떻게 기억할 것인지?

2. 액자에 걸수 있는 후보 사진이 꽉 찼을때 어떻게 제거하고 추가할 것인지?

 

필자는 본 사항을 딕셔너리를 통해 해결하였다.

다음과 같은 딕셔너리 형태를 만들고 진행했다.

Key : 후보자이름

Value : [추천수, 들어온 순서]

 

이런식으로  저장한다면 1번과 2번 모두 해결이 가능하다.

2번은 사진 게시가 꽉 찼을때 dict를 정렬한 후 조건에 맞게 제거해주면 된다.

 

전체적인 코드는 다음과 같습니다.

피드백과 질문은 언제나 감사드립니다.

import sys
input = sys.stdin.readline

N = int(input())
W = int(input())
num = list(map(int, input().split(" ")))

photo = dict()
for i in range(W) :
    if num[i] in photo :
        photo[num[i]][0] += 1
    else : 
        if len(photo) < N :
            photo[num[i]] = [1, i]
        else :
            del_list = sorted(photo.items(), key= lambda x : (x[1][0] , x[1][1]) )
            del_key = del_list[0][0]
            del(photo[del_key])
            photo[num[i]] = [1, i]

ans_list = list(sorted(photo.keys()))
answer = str(ans_list[0])
for i in ans_list[1: ] :
    answer += " " + str(i)
print(answer)
반응형
Comments