문제
https://www.acmicpc.net/problem/7568
문제를 잘못 접근했다.
몸무게가 큰 순서대로 sort로 정렬하고
0번째 리스트 원소와 1번째 리스트 원소를 비교 1번째 리스트 원소와 2번째 리스트 비교... 반복하여
해당 인덱스에 rank를 추가하였다.
[[88, 186, 1], [60, 175, 2], [58, 183, 2], [55, 185, 2], [46, 155, 5]]
출력을 구하였지만 문제에서 원하는 출력이 아니니까 다음과 같이 다시 리스트를 정렬전으로 만들려고 하였다.
[[55, 185, 2], [58, 183, 2], [88, 186, 1], [60, 175, 2], [46, 155, 5]]
그런데 이런 방식으로 알고리즘을 짜면 처음 정렬할 때, 나중에 리스트를 원래상태로 만들 때 리스트 여러번 탐색해야하므로 딱봐도 비효율적이다. 그래서 정렬하지 않고 해당 인덱스가 리스트 전체를 탐색하고 나보다 큰 원소가 존재하면 카운트를 추가하여 랭크라는 리스트에 저장하였다.
코드
n = int(input())
arr = [(list(map(int,input().split(" ")))) for _ in range(n)]
arr_rank = []
for i in range(n):
count = 0
for j in range(n):
if((arr[i][0] < arr[j][0]) and (arr[i][1] < arr[j][1])):
count+=1
arr_rank.append(count + 1)
for i in arr_rank:
print(i, end =' ')
절대 이렇게 작성하지 말기를..
더보기
n = int(input())
original_arr = [(list(map(int,input().split(" ")))) for _ in range(n)]
new_arr = original_arr
new_arr.sort(key = lambda x:x[0], reverse=True)
count = 1
new_arr[0].append(1)
if n >=2:
for i in range(0,n-1):
if((new_arr[i][0] > new_arr[i+1][0]) and (new_arr[i][1] > new_arr[i+1][1])):
count = i+2
new_arr[i+1].append(count)
else:
new_arr[i+1].append(count)
original_arr = [(list(map(int,input().split(" ")))) for _ in range(n)]
new_arr = original_arr
new_arr.sort(key = lambda x:x[0], reverse=True)
count = 1
new_arr[0].append(1)
if n >=2:
for i in range(0,n-1):
if((new_arr[i][0] > new_arr[i+1][0]) and (new_arr[i][1] > new_arr[i+1][1])):
count = i+2
new_arr[i+1].append(count)
else:
new_arr[i+1].append(count)
'Problem Solving > CT-Python' 카테고리의 다른 글
[백준/구현] 2669: 직사각형 네개의 합집합의 면적 구하기 - 파이썬 (0) | 2022.04.22 |
---|---|
[백준/프루트포스] 2309: 일곱 난쟁이 - 파이썬 (0) | 2022.04.14 |
[백준/그리디] 1715: 카드 정렬하기 - 파이썬 (0) | 2022.03.16 |
[백준/브루트포스] 4673: 셀프넘버 - 파이썬 (0) | 2022.03.16 |
[백준/그리디] 1026: 보물 - 파이썬 (0) | 2022.03.11 |