# [이.취.코] [백준] Chap 14. 정렬 - Q23. 국영수

- Author: @mildsalmon
- Published: 2021-10-01
- Updated: 2021-10-02
- Source: http://blex.me/@mildsalmon/%EC%9D%B4%EC%B7%A8%EC%BD%94-%EC%A0%95%EB%A0%AC-chap-14-%EC%A0%95%EB%A0%AC-q23-%EA%B5%AD%EC%98%81%EC%88%98
- Tags: 파이썬, 알고리즘, 한빛미디어, 나동빈, 코딩테스트, 문제, 풀이, 백준, 브루트포스

---

# 1. 국영수

- 난이도
	- 하
- 풀이 시간
	- 20분
- 시간 제한
	- 1초
- 메모리 제한
	- 256 MB
- 출처
	- [10825번: 국영수 (acmicpc.net)](https://www.acmicpc.net/problem/10825)

### A. 문제

위 백준 사이트에 접속하여 문제를 확인해주세요.
	
### B. 내 답안

##### a. 1차 시도 (삽입 정렬 / 시간초과)

```python

n = int(input())

array = []

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

# 삽입 정렬
for i in range(1, n):
    for j in range(i, 0, -1):
        # 국어 점수가 감수하는 순서로 -> 내림차순
        if array[j][1] > array[j-1][1]:
            array[j], array[j-1] = array[j-1], array[j]
        # 국어 점수가 같을 경우
        elif array[j][1] == array[j-1][1]:
            # 영어 점수가 증가하는 순서로 -> 오름차순
            if array[j][2] < array[j-1][2]:
                array[j], array[j - 1] = array[j - 1], array[j]
            # 영어 점수가 같을 경우
            elif array[j][2] == array[j-1][2]:
                # 수학 점수가 감수하는 순서로 -> 내림차순
                if array[j][3] > array[j-1][3]:
                    array[j], array[j - 1] = array[j - 1], array[j]
                # 수학 점수가 같을 경우
                elif array[j][3] == array[j-1][3]:
                    # 이름이 사전 순으로 증가하는 순서로 -> 오름차순
                    if array[j][0] < array[j-1][0]:
                        array[j], array[j - 1] = array[j - 1], array[j]

for i in range(n):
    print(array[i][0])

# print(*array, sep='\n')

```

##### b. 2차 시도 (정렬 함수)

```python

n = int(input())

array = []

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

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

for i in range(n):
    print(array[i][0])
	
```

##### a. 회고

> 내 풀이

- 처음에는 입력값이 10만개까지 들어온다는 것을 확인하지 못했다.
- 그리고 정렬 함수로 key를 여러개 줄 수 있다는 것도 몰랐다.
- 그래서 그냥 삽입 정렬로 풀었다.

> 반성

- 문제가 너무 쉽다고 생각해서 제한 조건은 보지 않고 문제를 어떻게 풀어야할지에 대해서만 생각했다.

> 결론

- 언제까지 문제를 다 안읽고 풀건지... 정말 고치자..

### C. 문제 해설

> 이해한 내용을 바탕으로 작성했습니다.

![[Chap 14. 정렬 - Q23. 국영수.png]]

위 방식대로 구현하면 된다. 근데 구현이랄 것도 없이, 정렬 함수에 키 인자값을 여러개(4개) 주면 된다. reverse인자를 주지 않았으니 default가 오름차순이다. 값에 `-`를 주어서 내림차순을 구현하였다.

##### a. 책 답안

[python-for-coding-test/1.py at master · ndb796/python-for-coding-test (github.com)](https://github.com/ndb796/python-for-coding-test/blob/master/14/1.py)

# 참고문헌

나동빈, "이것이 취업을 위한 코딩 테스트다 with 파이썬", 초판, 2쇄, 한빛미디어, 2020년

[10825번: 국영수 (acmicpc.net)](https://www.acmicpc.net/problem/10825). Baekjoon. (accessed Oct 1, 2021)
