[정렬/ BaekJoon] # 18870 좌표압축

su_y2on·2022년 3월 16일
0

알고리즘

목록 보기
36/47
post-thumbnail

백준 18870번
자기보다 작은 수의 개수



풀이1. 딕셔너리

  • 정렬을 한 뒤에 딕셔너리에 각 숫자보다 작은 숫자의 개수를 기록
N = int(input())
nums = list(map(int,input().split()))
pairs = {}

s_nums = sorted(nums) # 정렬 
pairs[s_nums[0]] = 0

cnt = 0
for i in range(1, N):
    if s_nums[i-1] != s_nums[i]: # 이전 숫자와 다르면 count up
        cnt += 1
    pairs[s_nums[i]] = cnt 


for num in nums:
    print(pairs[num], end=" ")



풀이2. set + 딕셔너리

  • set으로 중복을 제거하고 각 수의 인덱스를 딕셔너리에 저장
  • 리스트 내포딕셔너리 내포로 코드줄이기
N = int(input())
nums = list(map(int,input().split()))

s_nums2 = list(sorted(set(nums)))
pairs2 = { s_nums2[i]:i for i in range(len(s_nums2))}
print(*[pairs2[num] for num in nums])

0개의 댓글