백준_10825 (국영수_실버4_정렬_sort()의 파라미터 key_lambda_중요)

RostoryT·2022년 7월 22일
0

Sorting and Recursive

목록 보기
3/11

아이디어 생각이 안나서 블로그 봄 - 옛날


12
Junkyu 50 60 100
Sangkeun 80 60 50
Sunyoung 80 70 100
Soong 50 60 90
Haebin 50 60 100
Kangsoo 60 80 100
Donghyuk 80 60 100
Sei 70 70 70
Wonseob 70 70 90
Sanghyun 70 70 80
nsj 80 80 80
Taewhan 50 60 90

메모한 것

국->영->수->사전 순으로 하되,
국 : 큰~>작
영 : 작~>큰
수 : 큰~>작
사전 : 작~>큰


솔루션 코드 - 블로그

  • sort()에 key = 를 지정하면 리스트의 몇 번째 인덱스의 "값"을 기준으로 정렬할지 기준 메김(중요)

  • key = lambda x: x[1]

    • 문자열 정렬
    • 리스트 인덱스 1번의 값을 기준으로 정렬
  • key = lambda x: int(x[1])

    • 숫자형 정렬 -> 작~>큰 ++하며
  • key = lambda x: -int(x[1])

    • 숫자형 정렬 -> 큰~>작 --하며
  • key = lambda x: (-int(x[1]), x[3])

    • 여러 개를 기준으로 정렬 (정렬 시 우선순위 지정)
def solution(arr):
    arr.sort(key = lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))        
    ans = [i[0] for i in arr]
    return ans
        
n = int(input())
arr = [input().split() for _ in range(n)]

print("\n".join(solution(arr)))

  • 채점은 하지 않음

약 2주 후다시 풀었다

  • 람다를 써야한다는 것은 기억했으나,
  • 여전히 sort()함수 파라미터 옵션 중 key가 생각이 안났다..
  • sort(key = 리스트 내에서 정렬할 인덱스) 를 기억하자
  • 그리고 lambda x : (x[2], x[3]) 도 기억하자
import sys
input = sys.stdin.readline

n = int(input())
arr = [list(input().split()) for _ in range(n)]

for i in range(n):
    for j in range(1, 4):
        arr[i][j] = int(arr[i][j])

arr.sort(key = lambda x:(-x[1], x[2], -x[3], x[0]))
for i in arr:
    print(i[0])


profile
Do My Best

0개의 댓글