N, C=list(map(int,input().split()))
arr=list(map(int,input().split()))
li={}
j=1
for i in arr:
if i in li:
li[i][0] += 1
else:
li[i]=[1,j]
j+=1
li=sorted(li.items(), key=lambda x:(-x[1][0], x[1][1]))
res=[]
for i in li:
for j in range(i[1][0]):
res.append(str(i[0]))
print(" ".join(res))
<코드설명>
메시지 길이인 N과 입력받을 숫자의 범위인 C를 입력받았다. 그리고 arr에 수열을 입력받아주었다.
arr의 원소 i를 하나씩 확인하며, i가 li에 아직 없다면 li[i]=[1,j]를 저장해주었다. 이는 입력받은 순서를 확인해주기 위함이며, 해당 수가 처음 입력되었기 때문에 1의 값을 저장해준 것이다. 그리고 입력받은 수인 j를 1 증가시켜주어 모든 수의 입력받은 순서를 확인할 수 있도록 하였다. i가 li에 있다면 li[i][0]값을 1 증가시켜주었다.
그리고 li를 lambda 정렬을 해주었다.이렇게 구한 li를 출력형식과 동일하게 res에 저장하여 출력해주었다.
<실행결과>
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 9322 철벽 보안 알고리즘 (0) | 2022.10.09 |
---|---|
[BOJ] 1463 1로 만들기 (0) | 2022.10.02 |
[BOJ] 25325 학생 인기도 측정 (0) | 2022.10.02 |
[BOJ] 1912 연속합 (0) | 2022.09.25 |
[BOJ] 3986 좋은 단어 (0) | 2022.09.25 |