KEEP GOING

백준 10825번: 국영수 (sorted(리스트, key=lamda x:x[i]), set) 본문

code review/sort

백준 10825번: 국영수 (sorted(리스트, key=lamda x:x[i]), set)

jmHan 2021. 11. 9. 17:05
반응형

 

str_list = ['좋은하루','good_morning','굿모닝','niceday']
>>> str_list.sort()
>>> print(str_list)
['good_morning', 'niceday', '굿모닝', '좋은하루']

https://www.acmicpc.net/problem/10825

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

 

1. 코드 구현

import sys
n = int(input())
studnts = [[] for _ in range(n)]
for i in range(n):
    a,b,c,d = input().split()
    studnts[i] = [a,int(b),int(c),int(d)]
# res = sorted(studnts, key=lambda x:x[1], reverse=True)
# -부호를 사용하여 reverse = True 적용
res = sorted(studnts, key=lambda x: (-x[1], x[2], -x[3], x[0]))
for i in range(n):
    print(res[i][0])

 

 

set

튜플을 원소로하는 리스트가 있을 때, 리스트를 정렬하면 튜플을 구성하는 원소 순서대로 정렬된다. 다시말해 튜플의 첫번째 원소가 같은 경우 두 번째 원소 순서에 맞게 정렬되고 두 번째 원소 순서가 같다면 세번째 원소 순서에 맞게 정렬된다. 

a = [(5, 1, 5), (3, 5, 5), (3, 1, 9), (3, 1, 1)]
a.sort()

print(a)
>>> [(3, 1, 1), (3, 1, 9), (3, 5, 5), (5, 1, 5)]

 

sort

원본을 변형시켜 정렬한다. '변수. sort( )' 형태로 사용.

정렬 기준은 문자열은 알파벳, 가나다순이고 숫자는 오름차순이 기본값이다.

 str_list = ['좋은하루','good_morning','굿모닝','niceday']
>>> str_list.sort()
>>> print(str_list)
['good_morning', 'niceday', '굿모닝', '좋은하루']

 

sorted

정렬된 결과를 반환. 원형을 변형시키지 않는다. 정렬 기준은 문자열은 알파벳, 가나다순이고 숫자는 오름차순이 기본값이다.

 str_list = ['좋은하루','good_morning','굿모닝','niceday']
>>> print(sorted(str_list))
['good_morning', 'niceday', '굿모닝', '좋은하루']
>>>> print(str_list)
['좋은하루','good_morning','굿모닝','niceday']

 

sort, sorted의 parameter

3-1. reverse

bool값을 넣는다. 기본값은 reverse=False(오름차순)이다.

reverse=True를 매개변수로 입력하면 내림차순으로 정렬할 수 있다.

 

3-2. key

정렬을 목적으로 하는 함수를 값으로 넣는다. lambda를 이용할 수 있다.

key 값을 기준으로 정렬되고 기본값은 오름차순이다. 

 

>>> tuple_list = [('좋은하루', 0),
    	          ('niceday', 1), 
    	          ('좋은하루', 5), 
    	          ('good_morning', 3), 
    	          ('niceday',5)]
                  
>>> tuple_list.sort(key=lambda x : (x[0], x[1]))  # '-'부호를 이용해서 역순으로 가능
>>> print(tuple_list)
[('good_morning', 3), ('niceday', 1), ('niceday', 5), ('좋은하루', 0), ('좋은하루', 5)]
반응형
Comments