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
= int(input())
= 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] 꼴을 만들어서 풀었다. 원래는 튜플로 묶었지만 튜플은 내부 인덱스 값을 바꿀 수 없어서 리스트로 바꿨다.

+ Recent posts