본문 바로가기

알고리즘 공부/백준 > Python3

[백준 파이썬] #10825: 국영수

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

 

10825번: 국영수

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

www.acmicpc.net

[문제]

도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.

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

[문제 접근]

정렬 문제이므로 sort()함수을 사용한다. 기준이 여러 개이므로 key를 사용한다.

 

[정답]

 

1. 도현이네 반의 학생의 수 N을 입력받는다. 학생들의 이름과 점수를 저장할 리스트 score을 선언한다.

2. for문을 N번 돌면서 a에 학생 이름, b에 국어 점수, c에 영어점수, d에 수학점수를 넣는다. 그리고 점수는 int형태로 바꾸어 a,b,c,d를 튜플형태로 score에 추가한다.

3. score을 문제의 기준을 토대로 정렬한다.

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

  1) 국어 점수가 감소하는 순서대로 → -x[1]

  2) 영어 점수가 증가하는 순서대로 → x[2]

  3) 수학 점수가 감소하는 순서대로 → -x[3]

  4) 이름이 사전 순으로 증가하는 순서대로 → x[0]

4. for문을 돌면서 학생의 이름 i[0]을 출력한다.