하루에 하나-5(미해결)

정인창·2021년 9월 20일
0

코딩테스트 연습

목록 보기
5/19

  • 처음엔 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로 줘도 됨.
  • 어떤 부분이 문제일까요...
profile
Data science

0개의 댓글