[코드트리 챌린지] 객체 정렬_연습문제 & 테스트

HKTUOHA·2023년 10월 8일
0

코드트리

목록 보기
8/15
post-thumbnail

⭐실력진단 결과



객체를 정렬하는 방법에 대해 배우게 됩니다.

🟢개인정보

📌문제


📌나의 코드

  • class & sorted()
class Student:
    def __init__(self, name, height, weight):
        self.name, self.height, self.weight = name, height, weight

students = []
for _ in range(5):
    name, height, weight = input().split()
    students.append(Student(name, int(height), float(weight)))

# 이름순으로 정렬, 오름차순
name_sort = sorted(students, key = lambda x: x.name)
# 키가 큰 순으로 정렬, 내림차순
height_sort = sorted(students, key = lambda x: -x.height)

print('name')
for student in name_sort:
    print(student.name, student.height, student.weight)

print()
print('height')
for student in height_sort:
    print(student.name, student.height, student.weight)
  • class & sort()
class Student:
    def __init__(self, name, height, weight):
        self.name, self.height, self.weight = name, height, weight

students = []
for _ in range(5):
    name, height, weight = input().split()
    students.append(Student(name, int(height), float(weight)))

# 이름순으로 정렬, 오름차순
students.sort(key = lambda x: x.name)
print('name')
for student in students:
    print(student.name, student.height, student.weight)

print()

# 키가 큰 순으로 정렬, 내림차순
students.sort(key = lambda x: -x.height)
print('height')
for student in students:
    print(student.name, student.height, student.weight)
  • tuple
students = []
for _ in range(5):
    name, height, weight = input().split()
    students.append((name, int(height), float(weight)))

# 이름순으로 정렬, 오름차순
students.sort(key = lambda x: x[0])
print('name')
for n, h, w in students:
    print(n, h, w)

print()

# 키가 큰 순으로 정렬, 내림차순
students.sort(key = lambda x: -x[1])
print('height')
for n, h, w in students:
    print(n, h, w)


🟢키, 몸무게를 기준으로 정렬

📌문제


📌나의 코드

  • class
class Student:
    def __init__(self, name, height, weight):
        self.name, self.height, self.weight = name, height, weight

n = int(input())
students = []
for _ in range(n):
    name, height, weight = input().split()
    students.append(Student(name, int(height), int(weight)))

# 키 오름차순, 키가 동일한 경우 몸무게 내림차순
students.sort(key = lambda x: (x.height, -x.weight))

for student in students:
    print(student.name, student.height, student.weight)
  • tuple
n = int(input())
students = []
for _ in range(n):
    name, height, weight = input().split()
    students.append((name, int(height), int(weight)))
    
# 키 오름차순, 키가 동일한 경우 몸무게 내림차순
students.sort(key = lambda x: (x[1], -x[2]))

for name, height, weight in students:
    print(name, height, weight)


🟠원점으로부터의 거리

📌문제


📌나의 코드

# 점의 개수
n = int(input())

spots = []
for i in range(1, n + 1):
    x, y = map(int, input().split())
    spots.append((x, y, i))

# 원점과 (x, y) 사이가 가까운 순으로 정렬
spots.sort(key = lambda x: abs(x[0]) + abs(x[1]))

for _, _, num in spots:
    print(num)

🔓풀이

  1. 점의 좌표와 번호를 튜플로 만들어 리스트에 저장
  2. 점과 점 사이의 거리 = |x1 - x2| + |y1 - y2| 이므로 원점과의 거리는 |x| + |y|
  3. 번호만 필요하므로 좌표는 _ 처리 후 출력


🔴정렬된 숫자 위치 알아내기

📌문제


📌나의 코드

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

# 동일한 원소인 경우 먼저 나오는 원소가 더 앞으로
elems = []
for idx, num in enumerate(inputs, start=1):
    elems.append((num, idx))  # 편의를 위해 (원소, 위치)

# 오름차순 정렬, 동일한 원소일 경우 idx 오름차순
elems.sort(key = lambda x: (x[0], x[1]))

# 정답 리스트
result = [0] * (n + 1)

for idx, elem in enumerate(elems, start=1):
    result[elem[1]] = idx  # elem == (원소, 위치)

print(*result[1:])

✏️개선점

  • 원소의 원래 위치를 변수로 미리 선언할 수 있다.
for idx, (_, i) in enumerate(elems, start=1):
    result[i] = idx 




✔️테스트

🟢줄 세우기 2

📌문제


📌나의 코드

  • class
class Student:
    def __init__(self, height, weight, number):
        self.h, self.w, self.num = height, weight, number

n = int(input())
students = []
for num in range(1, n + 1):
    h, w = map(int, input().split())
    students.append(Student(h, w, num))

# 1순위: 키 오름차순, 2순위: 몸무게 내림차순
students.sort(key = lambda x: (x.h, -x.w))

for student in students:
    print(student.h, student.w, student.num)
  • tuple
n = int(input())
students = []
for num in range(1, n + 1):
    h, w = map(int, input().split())
    students.append((h, w, num))

# 1순위: 키 오름차순, 2순위: 몸무게 내림차순
students.sort(key = lambda x: (x[0], -x[1]))

for h, w, num in students:
    print(h, w, num)
profile
공부 기록

0개의 댓글