[백준 10814] 나이순 정렬 파이썬 (딕셔너리 정렬/이중리스트 정렬/튜플 정렬)

November·2024년 10월 9일

https://www.acmicpc.net/problem/10814
입력을 받고 {0:[21,"A"], 1:[20,"B"], 2:[21,"C"]} 이런 형태의 딕셔너리를 생성해서 value의 첫번째 요소로 오름차 정렬한 뒤, 값이 같을 경우 key로 오름차순 정렬 시도

n = int(input())
people = []
for _ in range(n):
    age, name = input().split()
    people.append([int(age), name])

adict = {} #딕셔너리 생성
for i in range(n):
    adict[i] = people[i]
#딕셔너리 정렬 
sorted_dict = list(sorted(adict.items(), key=lambda x: (x[1][0], x[0])))
answer = []

for i in range(n):
    answer.append(sorted_dict[i][1])

for i in answer:
    print(str(i[0]) + " " + i[1])  # 나이를 문자열로 변환하여 출력

딕셔너리를 굳이 생성하지 않고 리스트만 사용해서 정렬해도 된다 !!
Python의 sort() 함수나 sorted() 함수는 안정 정렬(stable sort)을 사용. 이는 정렬 기준이 동일할 경우, 원래의 입력 순서를 유지한다.

📒 정답 코드

n=int(input())
people=[]
for _ in range(n):
    age,name=input().split()
    people.append([int(age),name])
    
people.sort(key = lambda x : x[0])

for i in people:
    print(str(i[0])+ ' '+i[1])
        

딕셔너리 정렬

키를 기준으로 정렬하기

my_dict = {'banana': 3, 'apple': 2, 'orange': 5}
sorted_dict = dict(sorted(my_dict.items()))
print(sorted_dict)  # {'apple': 2, 'banana': 3, 'orange': 5}

값을 기준으로 정렬하기

sorted_by_value = dict(sorted(my_dict.items(), key=lambda item: item[1]))

튜플 정렬 & 이중리스트 정렬

튜플과 이중리스트 모두 sorted() 함수나 리스트의 sort() 메서드로 정렬 가능

  • 특정 요소를 기준으로 정렬하려면 key 매개변수를 lambda로 설정
  • 여러 기준으로 정렬하려면 key=lambda x: (x[기준1], x[기준2]) 형태
  • 내림차순으로 정렬하려면 reverse=True를 추가

오름차순 정렬

data = [(3, "banana"), (1, "apple"), (2, "cherry")]

# 첫 번째 요소를 기준으로 정렬 (기본값)
sorted_data = sorted(data)

두번째 요소 기준으로 정렬

# 두 번째 요소(문자열)를 기준으로 정렬
sorted_data = sorted(data, key=lambda x: x[1])

여러 기준으로 정렬


# 첫 번째 요소를 기준으로 오름차순, 두 번째 요소를 기준으로 오름차순
sorted_data = sorted(data, key=lambda x: (x[0], x[1]))

내림차순 정렬

sorted() 함수에 reverse=True 매개변수를 추가

sorted_data = sorted(data, reverse=True)
print(sorted_data)

0개의 댓글