jyamethyst21 님의 블로그
백준 10825번- '국영수' (PYTHON 풀이) 본문
문제:

사용자로부터 학생명과 국영수의 점수를 입력받는데, 이때 네가지 조건을 기준으로 정렬해서 순서대로 출력하면 된다.
조건에 대한 설명은 위에 잘 나와있어서 추가로 설명하지 않겠다.
풀이:
N = int(input())
arr = []
for i in range(N):
name, kor, eng, math = input().split()
arr.append((name, int(kor), int(eng), int(math)))
arr.sort(key=lambda x: (-x[1], x[2], -x[3], x[0]))
for j in arr:
print(j[0])
처음엔 sort를 쓰지않고 엄청 길게 if, for문을 활용해서 작성했었다. 그런데 너어어어무 길어져서 이건 아니다 싶어 원래 딕셔너리 정렬할 때 몇번 썼었던 sort+lambda 조합으로 작성해야겠다고 생각했다.
사용자로부터 입력받을 횟수를 받고, 그만큼 학생명, 각 점수를 입력받은 뒤에 미리 선언해두었던 arr 리스트에 튜플 형태로 저장한다.
그래서 첫번째 for문이 끝나면 arr라는 리스트에는 ('hong', 20, 60, 50), ('gil', 80, 70, 100) ... 이런 식으로 저장이 되어있을 것이다.
여기까지 하면 우리가 입력한 값들이 입력한 순서대로 정렬없이 저장이 되어있을 것이고, 이제 우리는 문제의 네가지 조건에 맞게 정렬해줄 필요가 있다. 이때 사용하는 함수가 sort이다.
sort에서 key는 정렬 조건을 설정할 수 있는 파라미터로, 이전에 백준의 다른 문제에서도 두번정도 사용한 기억이 있다. 이후에 안 풀어서 살짝 잊어버릴 뻔했는데 인터넷 서치하면서 다시 기억을 상기시켰다.
x는 arr에 있는 각 값을 의미하며, 이는 ('hong', 20, 60, 50)를 의미한다고 볼 수 있다. 이후 -x[1], x[2]... 이런 식으로 정렬 조건을 주고있는데 순서대로 살펴보면, 첫번째 인덱스인 국어점수를 내림차순으로(기본값은 오름차순, -를 붙이면 내림차순임), 두번째 인덱스는 오름차순, 세번째 인덱스는 내림차순, 마지막 조건은 이름 순서대로 정렬을 할 수 있도록 조건을 주고있다.
그 후 sort 함수가 끝나면 우리가 작성한 네가지 조건을 기준으로 순서대로 정렬이 되어있을 것이고 이제 그대로 이름만 출력하면 되니까 마지막 for문을 활용해서 각 값의 0번째 인덱스, 즉 이름을 반복문을 돌리면서 출력한다.
'CODING 💻' 카테고리의 다른 글
| 백준 11047번- '동전 0' (PYTHON 풀이) (0) | 2025.12.17 |
|---|---|
| 백준 11719번- '그대로 출력하기 2' (PYTHON 풀이) (1) | 2025.12.16 |
| 백준 3046번- 'R2' (PYTHON 풀이) (0) | 2025.12.14 |
| 백준 1259번- '팰린드롬수' (PYTHON 풀이) (0) | 2025.12.13 |
| 백준 2523번- '별 찍기 - 13' (PYTHON 풀이) (0) | 2025.12.12 |
