Home 백준 - 10814. 나이순 정렬 (MJ)
Post
Cancel

백준 - 10814. 나이순 정렬 (MJ)

#10814. 나이순 정렬

백준 사이트의 실버 5티어 문제이다.

📖Problems

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

입력

첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.

출력

첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.

예제 입력 1

1
2
3
4
5
3
21 Junkyu
21 Dohyun
20 Sunyoung

예제 출력 1

1
2
3
20 Sunyoung
21 Junkyu
21 Dohyun

🔍Approach

이 문제는 리스트의 정렬기능 sort()를 사용해서 풀었다.

다른 분들은 lambda를 사용하여 푸셨다.

주의해야 할 것은 단순히 정렬하는 것이 아니다!! 나이가 같다면, 그냥 입력한 순서대로 출력해야 한다. 따라서 한번에 그냥 sort한다고 해서 문제가 풀리지 않는다.

🚩My submission

  • 테스트케이스 N만큼 반복한다.
  • age, name을 각각 따로 입력받는다. age에 대해서만 정렬해야 하는데 sort()를 하면 name까지 같이 정렬되므로, 입력 받을 때 i와 함께 member리스트에 append한다. 나이가 같을 경우에는 i를 기준으로 정렬되도록 한다.
  • 이를 테스트케이스로 입력받은 N만큼 반복한다.
  • member리스트를 정렬한다.
  • 출력할 때는 i를 제외하고 출력한다.
1
2
3
4
5
6
7
8
9
10
N = int(input())
member = []
for i in range(N):
    age, name = map(str,input().split())
    member.append([int(age), i, name])

member.sort()

for i in range(N):
    print("%d %s"%(member[i][0], member[i][2]))

🚩Others submission

  • lambda 사용

코딩테스트 준비 - 백준10814번 나이순 정렬 풀이:파이썬 람다 리스트 정렬 (파이썬)

1
2
3
4
5
6
7
8
9
10
11
12
13
import sys
N=int(sys.stdin.readline())

arr=[]

for i in range (N): 
  a,b = map(str,sys.stdin.readline().split()) 
  arr.append([int(a), b]) 

arr.sort(key=lambda x:x[0]) # (age, name)에서 age만 비교

for i in arr:
  print(*i, sep=" ") #*i는 리스트 형식 없애줌

lambda

1
lambda 매개변수 : 표현식
  • case1
1
2
3
4
5
6
7
8
9
10
# 일반
>>> def hap(x, y):
...   return x + y
...
>>> hap(10, 20)
30

#lambda
>>> (lambda x,y: x + y)(10, 20)
30
  • case2
1
2
3
4
5
6
7
8
arr = [(1,3), (5,2), (2,3), (10,6), (-3, 2), (5,1), (10,4), (10, -3)]

arr.sort(key=lambda x:x[0])

print(arr)

#결과: [(-3, 2), (1, 3), (2, 3), (5, 2), (5, 1), (10, 6), (10, 4), (10, -3)]

  • case3
1
2
3
4
5
6
7
arr = [(1,3), (5,2), (2,3), (10,6), (-3, 2), (5,1), (10,4), (10, -3)]

arr.sort(key=lambda x:x[1])

print(arr)

#결과: [(10, -3), (5, 1), (5, 2), (-3, 2), (1, 3), (2, 3), (10, 4), (10, 6)]

💡TIL

  • 처음엔 나이 부분도 str으로 했는데 계속 안 돼서 int로 바꿔주니까 됐다.
  • lambda 무시하고 싶었지만,, 자주 등장하고 심지어 그냥 푼 이 문제에서도 나오길래 그냥 넘어가면 안 될 것 같아서 이렇게 정리하게 되었다.
  • sort(key=lambda x: ~~) 하게 되면 x뒤에 있는 값에 대해서 정렬한다.
This post is licensed under CC BY 4.0 by the author.