본문 바로가기
알고리즘/BOJ

[BOJ / 백준] 10825번 국영수 python / 파이썬 정렬 lamda 다중 조건

by seohmoon 2022. 6. 9.

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

 

10825번: 국영수

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

www.acmicpc.net


 입력을 문자열 리스트로 받아줘서 숫자로 바꿔주고 전체 리스트(lst)에 넣어줬다.

 

그 다음 정렬을 하는데 람다를 이용했는는데,

key=lambda x:(-x[1], x[2], -x[3], x[0])

첫번째 인자 기준으로 내림차순으로 정렬하기 위해 -를 붙여줬다.

그리고 첫번째 인자 기준 정렬이 끝나면 두번째 인자로 넘어가고 이렇게 순서대로 마지막까지 진행된다.

 

# BOJ 10825 국영수
N =int(input())
lst = []
for _ in range(N):
    i = list(map(str, input().split()))
    i[1] = int(i[1])
    i[2] = int(i[2])
    i[3] = int(i[3])
    lst.append(i)

lst.sort(key=lambda x:(-x[1], x[2], -x[3], x[0]))

for student in lst:
    print(student[0])

 

위에 올린 코드로 돌렸을때 시간이 너무 오래 걸려서

input 받는 방식을 바꿔서 시간을 줄여줬다.

 

import sys
input=sys.stdin.readline 을 추가해줌

# BOJ 10825 국영수
import sys
input=sys.stdin.readline

N =int(input())
lst = []
for _ in range(N):
    i = list(map(str, input().split()))
    i[1] = int(i[1])
    i[2] = int(i[2])
    i[3] = int(i[3])
    lst.append(i)

lst.sort(key=lambda x:(-x[1], x[2], -x[3], x[0]))

for student in lst:
    print(student[0])

내가 문제 푸는걸 보던 플레 친구가 이렇게 풀어도 된다고 알려줬다...

플레는 역시 다르다...

입력으로 주어진 값을 음수로 바꿔서 정렬할 생각을 하다니...

역시 천재다...

for i in range(n):
    name, kuk, eng, math = input().split()
    arr.append([-int(kuk), int(eng), -int(math), name])

arr.sort()

 

 

 

댓글