일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- dacon
- Baekjoon
- leetcode
- 파이썬
- AI 경진대회
- Real or Not? NLP with Disaster Tweets
- 더현대서울 맛집
- 백준
- Git
- ubuntu
- PYTHON
- programmers
- gs25
- 맥북
- Kaggle
- 우분투
- 데이콘
- 자연어처리
- 금융문자분석경진대회
- 프로그래머스 파이썬
- SW Expert Academy
- 코로나19
- 편스토랑 우승상품
- 편스토랑
- hackerrank
- Docker
- 프로그래머스
- 캐치카페
- github
- ChatGPT
- Today
- Total
솜씨좋은장씨
[BaeKJoon] 10825번: 국영수 (Python) 본문

1일 1문제! 7일차!
오늘의 문제는 백준에있는 국영수 문제입니다.
10825번: 국영수
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.
www.acmicpc.net
이 문제는 이름과 국어, 영어, 수학 점수를 입력받게 되면
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
정렬을 하고 이름을 출력하는 문제입니다.
이렇게 여러개의 조건이 있는 정렬은 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
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaeKJoon] 11652번: 카드 (Python) (0) | 2020.02.15 |
---|---|
[BaeKJoon] 10989번: 수정렬하기 3 (Python) (6) | 2020.02.14 |
[BaeKJoon] 10814번: 나이순 정렬 (Python) (0) | 2020.02.12 |
[BaeKJoon] 11651번: 좌표 정렬하기 2 (Python) (0) | 2020.02.11 |
[BaeKJoon] 11650번: 좌표 정렬하기 (Python) (2) | 2020.02.11 |