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

1. 국영수

A. 문제

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

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. 문제 해설

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

![[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)

이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.