본문 바로가기
Python

[백준] 10814번 : 나이순 정렬

by Leunco 2021. 12. 31.
유형 : 정렬

[예제]

3
21 Junkyu
21 Dohyun
20 Sunyoung

[출력]

20 Sunyoung
21 Junkyu
21 Dohyun

1. 내 풀이

N = int(input())
age_list = []
name_list = []
for _ in range(N):
    age, name = input().split(' ')
    age = int(age)
    age_list.append(age)
    name_list.append(name)

age_list2 = list(enumerate(age_list))
age_list3 = sorted(age_list2, key=lambda x:(x[1],x[0]))

for index, value in age_list3:
    print(value, name_list[index])

▷ 여기서 핵심은 enumerate와 sorted에서 key이다.

▷ enumerate()로 인덱스와 값을 같이 묶어 age_list에 넣을 수 있었다.

   ▶ 일차적으로 나이순으로 정렬해야 하니 나이 리스트를 이용해야겠다고 생각했다.

   ▶ 그리고 나이순 → 입력순이기 때문에 이 경우는 인덱스로 정렬해야겠거니 싶었다.

▷ enumerate()까지는 수월하게 생각했는데, 정렬하는 데에서 조금 시간을 잡았다.

   ▶ 아직 key 기준으로 정렬하는게 익숙지 않아서 검색을 하고 해결할 수 있었다.

   ▶ 참고한 블로그 : [Python] 정렬 문법 sort() sorted() reverse

 

2. 다른 풀이

출처 : 패스트캠퍼스 - 알고리즘 / 기술면접 완전 정복 올인원 패키지

 

** 핵심 아이디어
1. (나이, 이름)의 정보를 입력 받은 뒤에 나이를 기준으로 정렬
2. 파이썬의 기본 정렬 라이브러리를 이용
3. 나이가 동일한 경우 먼저 입력된 이름 순서를 따르도록 key 속성 설정

 

n = int(intput())

array = []

for _ in range(n):
    input_data = input().split(' ')
    array.append((int(intput_data[0]), input_data[1]))
 
array = sorted(array, key=lambda x:x[0])

for i in array:
	print(i[0], i[1])

 

 

문제 출처 : https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

 

반응형

댓글