


- 처음엔 sort에 대한 이해가 부족해서 아래와 같이 구현을 했습니다.
def solution(weights, head2head):
tmp = []
iter = len(weights)
for i in range(iter):
w = head2head[i].count('W')
cnt = 0
for j in range(iter):
if (head2head[i][j] == 'W') & (weights[i] < weights[j]):
cnt += 1
tmp.append([i+1, w, cnt, weights[i]])
tmp = sorted(tmp, key = lambda x: x[1], reverse = True)
for i in range(iter - 1):
tmp_lis = tmp[i]
if (tmp[i+1][1] == tmp[i][1]) & (tmp[i+1][2] > tmp[i][2]):
tmp[i] = tmp[i+1]
tmp[i+1] = tmp_lis
for i in range(iter - 1):
tmp_lis = tmp[i]
if (tmp[i+1][1] == tmp[i][1]) & (tmp[i+1][2] == tmp[i][2]) & (tmp[i+1][3] > tmp[i][3]):
tmp[i] = tmp[i+1]
tmp[i+1] = tmp_lis
for i in range(iter - 1):
tmp_lis = tmp[i]
if (tmp[i+1][1] == tmp[i][1]) & (tmp[i+1][2] == tmp[i][2]) & (tmp[i+1][3] == tmp[i][3]) & (tmp[i+1][0] < tmp[i][0]):
tmp[i] = tmp[i+1]
tmp[i+1] = tmp_lis
answer = list(map(lambda x: x[0], tmp))
return answer
- 우선 승리 횟수로 정렬하고, 제한 조건을 차례대로 구현
- 이는 테스트 케이스에 대해서는 다 맞았지만, 100점이 되진 않았습니다. 정렬을 너무 어렵게 생각해 제대로 못한 것 같습니다.
def solution(weights, head2head):
tmp = []
iter = len(weights)
for i in range(iter):
w = head2head[i].count('W')
cnt = 0
for j in range(iter):
if (head2head[i][j] == 'W') & (weights[i] < weights[j]):
cnt += 1
tmp.append([i+1, w, cnt, weights[i]])
answer = sorted(tmp, key = lambda x: [-x[1], -x[2], -x[3], x[0]])
answer = list(map(lambda x: x[0], answer))
return answer
- tmp에 [복서번호, 승리 횟수, 무거운 복서 이긴 횟수, 본인 무게] 리스트를 원소로 넣어준 후 sorted를 이용해 정렬.
- key를 저렇게 lambda를 이용해서 줄 수 있고, lambda를 이용해 [-승리횟수, -무거운 복서 이긴 횟수, -본인 무게, 복서 번호]를 키로 준다.
- sorted의 기본 정렬이 오름차순 정렬이므로 승리 횟수는 높은게, 무거운 복서 이긴 횟수는 높은게, 몸무게가 높은 순으로 정렬되야 하므로 -를 붙여서 생각!
- 아니라면 sorted에 reverse를 True로 줘도 됨.

- 어떤 부분이 문제일까요...