728x90
https://acmicpc.net/problem/1713
import sys
input = sys.stdin.readline
n = int(input()) # photo
r = int(input()) # total recommend, r <= 1000
r_list = list(map(int, input().split()))
r_dict = dict()
photo = []
for recommend in r_list:
if len(photo) < n:
if recommend not in r_dict:
r_dict[recommend] = 1
photo.append(recommend)
else:
r_dict[recommend] += 1
else:
if recommend in photo:
r_dict[recommend] += 1
else:
min_tmp = min([r_dict[photo[idx]] for idx in range(n)])
for idx, pht in enumerate(photo):
if r_dict[pht] == min_tmp:
r_dict[pht] = 0
photo.pop(idx)
break
photo.append(recommend)
if recommend not in r_dict:
r_dict[recommend] = 1
else:
r_dict[recommend] += 1
print(' '.join(map(str, sorted(photo))))
다른 문제에 비해 조금 어렵긴한데 그래도 할만하다. a형에 비하면 그냥 어린애 장난감 수준
문제를 보면 조건을 그대로 적었고, 조금 어려웠던? 귀찮았던? 조건은 3번이다.
- 비어있는 사진틀이 없는 경우에는 현재까지 추천 받은 횟수가 가장 적은 학생의 사진을 삭제하고, 그 자리에 새롭게 추천받은 학생의 사진을 게시한다. 이때, 현재까지 추천 받은 횟수가 가장 적은 학생이 두 명 이상일 경우에는 그러한 학생들 중 게시된 지 가장 오래된 사진을 삭제한다.
추천 받은 횟수를 적어놓기 위해 딕셔너리를 만들었고, 사진틀 위에 올라간 학생중 가장 적은 추천수를 찾아내었으며, 그 추천수에 해당하는 학생을 제거하였다.
가장 오래된 사진은 사진틀에 올라간 순서대로이므로 index로 값을 찾으면 자연스레 가장 오래된게 빠져 나오게된다.
열한시니까 오늘은 일찍잘수있겠다
Dog Honey...
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 2667 단지 번호 붙이기 (0) | 2021.02.24 |
---|---|
[백준] 2606 바이러스 (0) | 2021.02.24 |
[백준] 8979 올림픽 (0) | 2021.02.23 |
[백준] 2804 크로스워드 만들기 (0) | 2021.02.23 |
[SWEA] 5656_벽돌깨기, 모의역량테스트, 못푼 문제!! (0) | 2021.02.23 |