관리 메뉴

솜씨좋은장씨

[BaeKJoon] 10825번: 국영수 (Python) 본문

Programming/코딩 1일 1문제

[BaeKJoon] 10825번: 국영수 (Python)

솜씨좋은장씨 2020. 2. 13. 12:59
728x90
반응형

1일 1문제! 7일차!

오늘의 문제는 백준에있는 국영수 문제입니다.

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.

www.acmicpc.net

이 문제는 이름과 국어, 영어, 수학 점수를 입력받게 되면

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

정렬을 하고 이름을 출력하는 문제입니다.

 

이렇게 여러개의 조건이 있는 정렬은 sorted와 lambda만 있으면 해결할 수 있습니다.

 

이를 한번 살펴보면 만약

example_list = [(0, 3), (1, 2), (2, 7), (3, 5), (4, 1)]

이런 변수들을 가지고 있는 리스트가 하나 있다고 했을 때

각 아이템들의 두번째 숫자를 기준으로 오름차순 정렬을 하고 싶다 하면

example_sorted_list = sorted(example_list, key=lambda x : x[1])

위와 같이 sorted 함수 내에 key= lambda ~~ 를 통해서 비교할 대상을 정해주면 됩니다.

그렇게 되면 

[(4, 1), (1, 2), (0, 3), (3, 5), (2, 7)]

위와 같이 결과를 얻을 수 있습니다.

 

여기서! 만약 두번째 숫자 기준으로 내림차순 정렬을 하고 싶다한다면 간단합니다.

example_sorted_list = sorted(example_list, key=lambda x : -x[1])

조금 전 비교함수를 썼던 부분에서 비교 대상에 -를 붙여주면 내림차순으로 정렬됩니다.

그 결과는

[(2, 7), (3, 5), (0, 3), (1, 2), (4, 1)]

위와 같이 내림차 순으로 정렬된 결과를 얻을 수 있습니다.

 

자 그럼 이제 이 개념을 가지고 문제를 풀어보겠습니다.

N = int(input())

score_list = []

for i in range(N):
    [name, kor, eng, math] = map(str, input().split())
    
    score_list.append([name, int(kor), int(eng), int(math)])
    

sorted_score_list = sorted(score_list, key=lambda x : (-x[1], x[2], -x[3], x[0]))

for score in sorted_score_list:
    print(score[0])

결과는!

파이썬이 numpy같은라이브러리를 사용하지 않으면 속도는 느리지만 코드를 짧게 짤 수 있어서 좋은 것 같습니다.

 

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

 

Comments