어떤 수열을 빈도순, 입력순으로 정렬하는 문제입니다.
간단한거 같지만 은근 까다롭게 느껴졌던 문제입니다.
결국 수열의 각 수의 빈도, 등장 순서 등을 한번에 dict를 이용해서 정리한 후,
원하는 기준으로 정렬해주었습니다.
count
의 각 key
는 해당 수이고, value
는 [빈도, 등장인덱스, 수]의 리스트입니다.
이렇게 모든 수에 대해 정리한 후, 빈도 및 등장 인덱스를 기준으로 정렬하여 출력했습니다.
def main():
n, c = map(int, input().split())
numbers = list(map(int, input().split()))
count = {}
for idx, num in enumerate(numbers):
if num in count:
count[num][0] += 1
else:
count[num] = [1, idx, num]
frequency = sorted(count.values(), key= lambda x: (-x[0], x[1]))
result = []
for fre in frequency:
result += [fre[2]] * fre[0]
print(*result)
if __name__ == "__main__":
main()
정렬 기준은
입니다.
또한 빈도는 내림차순, 빈도가 같은 경우 순서는 오름차순으로 정렬이 되어야 우리가 원하는 순서로 정렬할 수 있습니다.
따라서 sorted
함수의 key
값을 위 코드와 같이 작성해서 해결했습니다.
위 코드에서 lambda
의 각 x
는 [빈도, 등장인덱스, 수] 입니다.