1. 국영수
- 난이도
- 하
- 풀이 시간
- 20분
- 시간 제한
- 1초
- 메모리 제한
- 256 MB
- 출처
A. 문제
- 하
- 20분
- 1초
- 256 MB
위 백준 사이트에 접속하여 문제를 확인해주세요.
B. 내 답안
a. 1차 시도 (삽입 정렬 / 시간초과)
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차 시도 (정렬 함수)
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. 문제 해설
이해한 내용을 바탕으로 작성했습니다.
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차 시도 (정렬 함수)
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. 문제 해설
이해한 내용을 바탕으로 작성했습니다.
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])
내 풀이
- 처음에는 입력값이 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)
참고문헌
나동빈, "이것이 취업을 위한 코딩 테스트다 with 파이썬", 초판, 2쇄, 한빛미디어, 2020년
10825번: 국영수 (acmicpc.net). Baekjoon. (accessed Oct 1, 2021)
Ghost