공부하기/백준

[Python] 백준 풀기 10825 - 국영수

XEV 2022. 12. 2. 21:52

파이썬 백준 10825번

실버4

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

 

10825번: 국영수

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 정렬

 

 

 

 

 

문제 풀기

sort() 함수와 lambda 를 이용하여 한 줄로 작성을 하려 했는데 생각처럼 되지 않았다.

아니 다시 해보니 생각대로 된다. 답안은 이미 제출했는데.. 맥주의 힘인가..

괄호를 치는데 잘못됨이 있었다 더 공부하자

 

 

문제에서 제시한 조건 1. 2. 3. 4. 순서를 보면 순차적으로 다음 조건을 제시하는데 이는 이름이 제일 중요도가 낮음이 된다. 따라서 제일 중요도가 낮은 이름으로 먼저 정렬을 한 후, 수학, 영어 그리고 국어로 정렬을 진행한다.

이때, 이름은 사전 순이기에 오름차순, 수학은 감소하는 순서인 내림차순, 영어는 오름차순 그리고 국어는 내림차순으로 정렬을 한다.

 

 

입력은 grade_ls 리스트에 모두 string 으로 입력을 받고 정렬을 하는 과정에서 integer 로 변환하여 정렬을 한다.

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

 

 

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

def fnSortGrades():
    grade_ls.sort(key = lambda x: (-int(x[1]), int(x[2]), -int(x[3]), str(x[0])))
    # print(grade_ls)         # test print
    
    return grade_ls


if __name__ == "__main__":
    N = int(inputdata().strip())
    grade_ls = [list(map(str, inputdata().split())) for _ in range(N)]
    # print(grade_ls)         # test print
    
    result = fnSortGrades()
    
    for res in result:
        print(res[0])

 

 

 

 

 

추가 하기

처음 제출한 코드

import sys
inputdata = sys.stdin.readline

def fnSortGrades():
    grade_ls.sort(key = lambda x: str(x[0]))
    print(grade_ls)         # test print
    grade_ls.sort(key = lambda x: int(x[3]), reverse = True)
    print(grade_ls)         # test print
    grade_ls.sort(key = lambda x: int(x[2]))
    print(grade_ls)         # test print
    grade_ls.sort(key = lambda x: int(x[1]), reverse = True)
    print(grade_ls)         # test print
    
    return grade_ls


if __name__ == "__main__":
    N = int(inputdata().strip())
    grade_ls = [list(map(str, inputdata().split())) for _ in range(N)]
    print(grade_ls)         # test print
    
    result = fnSortGrades()
    
    for res in result:
        print(res[0])



# 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

# [['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']]
# [['Donghyuk', '80', '60', '100'], ['Haebin', '50', '60', '100'], ['Junkyu', '50', '60', '100'], ['Kangsoo', '60', '80', '100'], ['Sanghyun', '70', '70', '80'], ['Sangkeun', '80', '60', '50'], ['Sei', '70', '70', '70'], ['Soong', '50', '60', '90'], ['Sunyoung', '80', '70', '100'], ['Taewhan', '50', '60', '90'], ['Wonseob', '70', '70', '90'], ['nsj', '80', '80', '80']]
# [['Donghyuk', '80', '60', '100'], ['Haebin', '50', '60', '100'], ['Junkyu', '50', '60', '100'], ['Kangsoo', '60', '80', '100'], ['Sunyoung', '80', '70', '100'], ['Soong', '50', '60', '90'], ['Taewhan', '50', '60', '90'], ['Wonseob', '70', '70', '90'], ['Sanghyun', '70', '70', '80'], ['nsj', '80', '80', '80'], ['Sei', '70', '70', '70'], ['Sangkeun', '80', '60', '50']]
# [['Donghyuk', '80', '60', '100'], ['Haebin', '50', '60', '100'], ['Junkyu', '50', '60', '100'], ['Soong', '50', '60', '90'], ['Taewhan', '50', '60', '90'], ['Sangkeun', '80', '60', '50'], ['Sunyoung', '80', '70', '100'], ['Wonseob', '70', '70', '90'], ['Sanghyun', '70', '70', '80'], ['Sei', '70', '70', '70'], ['Kangsoo', '60', '80', '100'], ['nsj', '80', '80', '80']]
# [['Donghyuk', '80', '60', '100'], ['Sangkeun', '80', '60', '50'], ['Sunyoung', '80', '70', '100'], ['nsj', '80', '80', '80'], ['Wonseob', '70', '70', '90'], ['Sanghyun', '70', '70', '80'], ['Sei', '70', '70', '70'], ['Kangsoo', '60', '80', '100'], ['Haebin', '50', '60', '100'], ['Junkyu', '50', '60', '100'], ['Soong', '50', '60', '90'], ['Taewhan', '50', '60', '90']]

# Donghyuk
# Sangkeun
# Sunyoung
# nsj
# Wonseob
# Sanghyun
# Sei
# Kangsoo
# Haebin
# Junkyu
# Soong
# Taewhan