문제
[줄 세우기]
풀러 가기
N명의 학생에 대해 키, 몸무게 정보가 주어졌을 때, 다음의 규칙에 따라 정렬하려고 합니다.
-
키가 더 큰 학생이 앞에 와야 합니다.
-
키가 동일하다면, 몸무게가 더 큰 학생이 앞에 와야 합니다.
-
키와 몸무게가 동일하다면, 번호가 작은 학생이 앞에 와야 합니다.
번호는 정보가 따로 주어지진 않고 입력된 순서대로 부여됩니다.
즉 첫 번째로 입력된 학생은 1, k번째로 입력된 학생은 k입니다.
주어진 규칙에 따라 정렬한 이후 학생의 키, 몸무게, 번호를 출력하는 프로그램을 작성해보세요.
입력 형식
첫 번째 줄에는 학생의 수를 나타내는 N이 주어집니다.
두 번째 줄부터는 N개의 줄에 걸쳐 학생들의 키와 몸무게 정보가 번호 순서대로 주어집니다.
각 줄마다 각 학생에 대한 키와 몸무게를 나타내는 h, w 값이 공백을 사이에 두고 주어집니다. (1 ≤ h, w ≤ 1000)
- 1 ≤ N ≤ 1,000
출력 형식
규칙에 따라 정렬한 이후의 결과를 N개의 줄에 걸쳐 출력합니다.
각 줄에는 정렬한 이후 N명의 학생의 정보를 순서대로 한 줄에 하나씩 출력합니다.
각 줄에는 각 학생의 키, 몸무게, 그리고 번호를 공백을 사이에 두고 출력합니다.
Constraints:
시간 제한: 1000ms
메모리 제한: 80MB
입출력 예제
예제 1
입력:
2
1 5
3 6
출력:
3 6 2
1 5 1
예제 2
입력:
4
1 5
1 7
3 6
1 7
출력:
3 6 3
1 7 2
1 7 4
1 5 1
풀이과정
변수 선언, 입력값 받기
n = int(input())
given_inputs = [
tuple(map(int, input().split()))
for _ in range(n)
]
students = [
Student(height, weight, i + 1)
for i, (height, weight) in enumerate(given_inputs)
]
정렬
정렬할 대상.sort(key = lambda x:(우선 정렬 기분 순서대로 나열))
-x
: 내림차순으로 정렬x
: 오름차순으로 정렬
students.sort(key = lambda x: (-x.height, -x.weight, x.number))
출력
for student in students:
print(student.height, student.weight, student.number)
구현
# 클래스 선언
class Student:
def __init__(self, height, weight, number):
self.height, self.weight, self.number = height, weight, number
# 변수 선언 및 입력
n = int(input())
given_inputs = [
tuple(map(int, input().split()))
for _ in range(n)
]
students = [
Student(height, weight, i + 1)
for i, (height, weight) in enumerate(given_inputs)
]
# Custom Comparator를 활용한 정렬
students.sort(key = lambda x: (-x.height, -x.weight, x.number))
# 출력
for student in students:
print(student.height, student.weight, student.number)
결과
쨔쨘