알고리즘 문제풀이/백준
[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)반응형