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

+ Recent posts