1. arr에 입력받은 좌표들을 저장함
2. s에 arr를 집합으로 바꾼 것을 저장함(중복제거)
3. sorted_arr에 arr의 인덱스와 arr의 원소를 저장함
4. sorted_arr를 내림차순 정렬함
5. sorted_arr의 값을 하나씩 확인하면서
그 값이 집합s 안에 있다면 집합에서 그 원소를 제거하고 집합 원소의 개수를 계산함
res라는 리스트에 [arr에서의 인덱스, arr 원소의 값, 집합의 길이(자신보다 작은 숫자의 개수]를 저장함
6. res의 2번열 즉, 자기보다 작은 수의 개수를 출력함
n = int(input())
arr = list(map(int,input().split()))
s = set(arr)
sorted_arr = []
for i in range(len(arr)):
sorted_arr.append([i,arr[i]])
sorted_arr.sort(key=lambda x:(x[1]), reverse=True)
res = []
for i in range(len(arr)):
if sorted_arr[i][1] in s:
s.remove(sorted_arr[i][1])
res.append([sorted_arr[i][0], sorted_arr[i][1], len(s)])
res.sort(key=lambda x:(x[0]))
for i in res:
print(i[2],end= ' ')
전체적인 내용은 유사한데 딕셔너리를 쓰면 더 간단하게 구현할 수 있길래 고쳐봤다.
1. arr에 입력된 좌표를 저장한다.
2. arr에서 중복을 제거해 집합 s를 만든다.
3. s를 오름차순 정렬한다.
4. s를 리스트로 바꾼 s_list를 생성한다.
5. 딕셔너리 d를 생성한다.
key : arr에 저장된 좌표값
value : 그 좌표값보다 작은 값들의 개수
n = int(input())
arr = list(map(int,input().split()))
s = set(arr)
s = sorted(s)
s_list = list(s)
d = {}
for i in range(len(s)):
d[s_list[i]] = i
for i in range(len(arr)):
print(d[arr[i]],end= ' ')
'[BOJ] - Python' 카테고리의 다른 글
[백준] 1743 : 음식물 피하기 python (0) | 2023.09.10 |
---|---|
[백준] 7562 : 나이트의 이동 python (0) | 2023.09.10 |
[백준] 단계별로 풀어보기 - 정렬 2750, 2587, 25305, 2751, 10989, 1427, 11650, 11651 python (0) | 2023.08.29 |
[백준] 10814 : 나이순 정렬 python (0) | 2023.08.29 |
[백준] 1181 : 단어 정렬 (0) | 2023.08.29 |