출처 : 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()
끝
'알고리즘 > BOJ' 카테고리의 다른 글
| [BOJ / 백준] 2217번 로프 python / 파이썬 정렬 (0) | 2022.06.13 |
|---|---|
| [BOJ / 백준] 15650번 N과 M(2) python / 파이썬 조합 combinations (0) | 2022.06.09 |
| [BOJ / 백준] 11728번 배열 합치기 python / 파이썬 리스트 합치기 (2) | 2022.06.08 |
| [BOJ / 백준] 15650번 N과 M python / 파이썬 순열 permutations (0) | 2022.06.07 |
| [BOJ / 백준] 2870 수학숙제 python / 파이썬 (0) | 2022.06.07 |
댓글