위 문제는 첫째줄에서 사람의 수 N을 입력받은 후 N의 갯수만큼 몸무게와 키를 입력받은 후 등수를 매기는 문제이다.
이렇게만 보면 파이썬 내장함수인 sort를 사용하면 쉽게 구현이 가능하지만 추가 조건으로
위 문제를 풀면서 파이썬 내장함수인 zip을 사용하면 내부요소가 tuple로 묶인다는것을 처음알았다😂😂
(list append에서 error가 떠서 알게되었다.)
지금까지는 zip을 사용할때 요소가 묶이는것만을 고려했지 묶인 자료형이 tuple인지 List인지까지는 관심이없었던것같다.
N과 몸무게, 키를 입력받고 zip으로 묶은 뒤, 각 요소에 인덱스를 추가하는 방식으로 문제를 구현했다.
# boj, 7568 : 덩치, python3
N = int(input())
if N > 51 or N < 2:
print("N range error")
else:
weight = []
height = []
rank = 0
s = []
answer = []
for i in range(N):
w, h = list(map(int,input().split()))
if w > 200 or w < 10:
print("w range error")
break
elif h > 200 or h < 10:
print("h range error")
break
else:
weight.append(w)
height.append(h)
deongchi = [list(a) for a in zip(weight,height)] #zip type convert tuple -> list
for i in range(N):
deongchi[i].append(i) #add index
w_sort = sorted(deongchi, key = lambda x : x[0])
for i in range(N):
weight,height = w_sort[i][0],w_sort[i][1]
rank = 1
for j in range(i+1,N):
if height < w_sort[j][1] and weight < w_sort[j][0] :
rank += 1
s.append((w_sort[i][2],rank))
s.sort()
for i in range(N):
answer.append(s[i][1])
for i in range (0, N):
print(answer[i], end = ' ')
https://www.acmicpc.net/problem/7568