1713번: 후보 추천하기
첫째 줄에는 사진틀의 개수 N이 주어진다. (1 ≤ N ≤ 20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대
www.acmicpc.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
n = int(input())
k = int(input())
arr = list(map(int, input().split()))
ans = []
# [prior, vote, 1] 꼴은 관리하기 어려우니 vote 의 유무만 판별 할 list 생성
vote_list = []
for prior, vote in enumerate(arr):
# 처음 들어오는 숫자면
if vote not in vote_list:
val = [prior, vote, 1]
# 액자틀이 남아있는 경우
if len(ans) != n:
ans.append(val)
vote_list.append(vote)
continue
# 액자틀이 꽉 찬 경우
else:
# 추천받은 학생의 수가 가장 적은 경우 탐색 && 두명 이상인 경우
lowest = sorted(ans, key=lambda x: (x[2], x[0])) # lowest[0] = 나가야 할 사진
# vote_list 에서 삭제
vote_list.remove(lowest[0][1])
# 새로운 값 추가
vote_list.append(vote)
# 새로운 값으로 바꿔치기
lowest[0][0] = prior
lowest[0][1] = vote
lowest[0][2] = 1
# .copy() 를 통해 ans 최신화
ans = lowest.copy()
# 처음이 아니라면
else:
for i in ans:
if i[1] == vote:
i[2] += 1
result = []
for i in ans:
result.append(i[1])
result.sort()
for i in result:
print(i, end =' ')
|
cs |
[우선순위, 투표한 번호, count] 꼴을 만들어서 풀었다. 원래는 튜플로 묶었지만 튜플은 내부 인덱스 값을 바꿀 수 없어서 리스트로 바꿨다.
'알고리즘 문제풀이 with 파이썬 > 백준' 카테고리의 다른 글
[12015, 이진 탐색, LIS] 가장 긴 증가하는 수열2 (0) | 2021.08.24 |
---|