[백준] 10825번 국영수 (Python3)

Song_Song·2021년 5월 16일
0

문제 링크 : https://www.acmicpc.net/problem/10825

복수개의 조건으로 정렬을 하는 문제. 이 문제도 파이썬으 sort()함수와 lambda 식을 활용하면 간단하게 풀 수 있다.

문제 조건
국어 점수가 감소하는 순서로
국어 점수가 같으면 영어 점수가 증가하는 순서로
국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)

위 조건을 맞추려면 역순으로 (이름 -> 수학점수 -> 영어점수 -> 국어점수) 순으로 정렬을 해야 원하는 답을 얻을 수 있다.
이를 lambda식을 활용한 sort()함수를 사용하면 아래와 같다.

data.sort(key=lambda x : x[0], reverse=False) 
data.sort(key=lambda x : x[3], reverse=True)
data.sort(key=lambda x : x[2], reverse=False)
data.sort(key=lambda x : x[1], reverse=True)

여기서 중복을 제거할 수 있는 간단한 방법은 lambda의 표현식을 괄호 안에 여러개 넣으면 된다.
순서는 위 코드의 역순으로 넣는다. 문제 조건의 순서 그대로 표현식을 써 넣으면 된다.

위 코드를 한줄로 표현하면 아래와 같다.

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

문제의 전체 코드를 보자.

나의 풀이

import sys

n = int(sys.stdin.readline())
data = []
for i in range(n):
    [name, kor, eng, math] = list(map(str,sys.stdin.readline().split()))
    data.append([name, int(kor), int(eng), int(math)])
    # 국어 감소 , 영어 증가, 수학 감소, 이름 증가

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


for d in data:
    print(d[0])
profile
성장을 위한 정리 블로그

0개의 댓글