[정렬] 10825번, 18310번

조은지·2021년 10월 6일

1. 국영수

링크 - https://www.acmicpc.net/problem/10825

코드

import sys

input = sys.stdin.readline
#모든 값에 대해 정렬하기 쉽게 리스트를 생성함
students =[]
n = int(input())

for _ in range(n):
    line = list(input().split())
    for i in range(1,4):
        line[i]=int(line[i])
    students.append(line)
    

#이름을 사전순으로 정렬(오름차순)
students.sort()

#수학점수 내림차순으로 정렬
students.sort(key = lambda x:x[3],reverse=True)

#영어점수 오름차순으로 정렬
students.sort(key = lambda x:x[2])

#국어점수 내림차순으로 정렬
students.sort(key = lambda x:x[1],reverse=True)

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

모든 원소에 대해 정렬을 해주어야 하기 때문에 리스트를 사용했고,
점수는 int형으로 바꿔준 후 정렬을 했다.
정렬 조건의 역순으로 하면 문제 조건을 만족시킬 수 있었다.

그런데...

답지코드

#출처 - 이것이 코딩테스트다 with python

n = int(input())
students = [] # 학생 정보를 담을 리스트

# 모든 학생 정보를 입력 받기
for _ in range(n):
    students.append(input().split())

'''
[ 정렬 기준 ]
1) 두 번째 원소를 기준으로 내림차순 정렬
2) 두 번째 원소가 같은 경우, 세 번째 원소를 기준으로 오름차순 정렬
3) 세 번째 원소가 같은 경우, 네 번째 원소를 기준으로 내림차순 정렬
4) 네 번째 원소가 같은 경우, 첫 번째 원소를 기준으로 오름차순 정렬
'''
students.sort(key=lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))

# 정렬된 학생 정보에서 이름만 출력
for student in students:
    print(student[0])

답지 코드에는 sort()를 한 번만 호출해서 모두 정렬을 해주었다..
우하하~~~ 저렇게 해도 되는 거군아...한 수 배워갑니도...

2. 안테나

링크 - https://www.acmicpc.net/problem/18310

코드

import sys
input = sys.stdin.readline

n = int(input())
house = list(map(int,input().split()))

mid = n//2

house.sort()

print(house[(n-1)//2 ])

중간값을 구하면 된다는 아이디어와 코드는 단순하지만
n이 짝수일 때와 n이 홀수일 때를 각각 생각해주어야 한다는 점이 조금 까다로웠다.

0개의 댓글