Coding Test/Python (백준, 프로그래머스)

[백준|실버4] 10825번 국영수 - Python(파이썬)

ʕ민지ʔ 2024. 9. 8. 23:50

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

import sys
input = sys.stdin.readline

n = int(input())
students = []
for _ in range(n):
    temp = input().split()
    students.append([temp[0], int(temp[1]), int(temp[2]), int(temp[3])])

students.sort(key=lambda x:x[0]) # 학생 이름 사전 순으로 정렬 (오름차)
students.sort(key=lambda x:x[3], reverse=True) # 수학 감소하는 순서로 정렬
students.sort(key=lambda x:x[2]) # 영어 증가하는 순서로 정렬
students.sort(key=lambda x:x[1], reverse=True) # 국어 감소하는 순서로 정렬

for s in students:
    print(s[0])

 

문자열과 숫자를 한줄에 입력받아 하나의 문자열로 넣을때, 임시로 temp나 chunk 같은 변수에 입력값을 넣어두고 인덱스마다 int 처리를 하는 방법으로 한 번에 문자열과 정수형 입력을 처리할 수 있다!

 

2차원 배열의 정렬을 할 때엔 key=lambda를 이용한다

뒤의 x:x[0]은 0번째 인덱스에 대해서 정렬한다는 의미이고, 문제의 조건에서

 

1. 국어 점수가 감소하는 순서로

2. 국어 점수가 같으면 영어 점수가 증가하는 순서로

3. 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로

4. 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)

였는데 이 조건을 지키려면 4>3>2>1 순으로 정렬을 처리해줘야 한다~