1. 문제 설명
https://www.acmicpc.net/problem/1713
2. 아이디어
이게 한창 파이썬 공부 겸 알고리즘 공부할 때였기 때문에 del 연산을 처음 써봤었다.
구현 자체는 어렵지 않다. 문제 조건에 주는 대로 그대로 구현하면 된다.
추천한 후보를 순서대로 훑으면서 액자에 걸려있지 않다면
액자(result)에 걸고(append), 추천수는 cnt리스트에 따로 저장한다.
생각해보면 딕셔너리 같은 걸로 같이 묶어서 저장해도 나쁘지 않을 것 같다.
동시에 append했기 때문에 둘의 인덱스 위치는 같다.
따라서 cnt의 크기가 가장 작은 위치의 인덱스를 받아서 result[idx], cnt[idx] 모두 날려버릴 수 있다.
3. 코드
def solution():
n = int(input()) # 액자 수 1 <= n <= 20
candidate = int(input()) # 전체 학생의 추천 수 <= 1000
vote = list(map(int, input().split())) # 추천한 후보 1 <= x <= 100
result = []
cnt = []
for i in vote:
if i in result:
cnt[result.index(i)] += 1
else:
if len(result) >= n:
idx = cnt.index(min(cnt))
del result[idx]
del cnt[idx]
result.append(i)
cnt.append(1)
result.sort()
print(' '.join(map(str, result)))
solution()