본문 바로가기
코딩테스트/백준 알고리즘

백준 알고리즘 | 10814 : 나이순 정렬 (Python / 파이썬)

by 함께 공부해요 2020. 12. 25.


나이순 정렬 성공분류

시간 제한

메모리 제한

제출

정답

맞은 사람

정답 비율

3 초

256 MB

34672

14389

10929

41.324%

https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

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

www.acmicpc.net


문제

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

입력

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

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

출력

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

알고리즘 분류

정렬


 

백준 알고리즘 # 10814번 : 나이순 정렬

출처:  https://wikidocs.net/64

n = int(input())

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

# sort_ls = sorted(ls) -> A-Z 순으로 정렬되서 오답

ls.sort(key = lambda parameter_list: parameter_list[0])

"""
위 lambda식과 동일
ls안에 있는 것들이 parameter_list의 인수(argument)가 되어 
인덱스 [0]에 해당하는 age로만 정렬됨
인덱스 [1]로 하면 name으로 정렬할 것임

def ladmbda(parameter_list):
    return parameter_list[0]
"""

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

풀이

이 문제의 포인트는 lambda의 활용인 것 같네요!

n 변수로 온라인 저지 회원의 수를 입력받고

ls 변수를 리스트로 초기화 한 뒤 for 반복문으로

age, name 변수로 각각 str 타입으로 값을 입력받은 뒤 (이때 숫자도 '21'로 저장됨)

age는 다시 int 타입, 정수로 초기화하고 ls에 추가했습니다👍🏻

다음으로 첨부한 사진에 나오는 것처럼 lambda에 대해 먼저 공부해보자면

key point

parameter(매개변수, 인자): return할 함수(argument(인수))

위와 같이 이름없는 함수(lambda)라는 것에 걸맞게 이름없이 순식간에 함수식을 만드는데 쓰는데요.

def blahblah(parameter):

return(parameter[0])

= lambda parameter: parameter[0]

두 개의 코드가 동일한 코드라고 생각하면 됩니다🙌🏻

이제 ls에 있는 리스트 중 parameter_list[0]에 해당하는 첫 번째 인덱스로만 sort() 정렬을 하면

name은 건드리지 않고 age순으로만 정리되어 예제 출력값을 뽑을 수 있게됩니다.

(바로 sorted를 통해서 정렬하게 되면 A-Z순으로도 정렬되어 예제 출력과 다르게 나옵니다.)

마지막으로 for 반복문으로 ls 리스트에 [0] [1] 인덱싱으로 출력해주면 문제풀이 끄---읏!👏🏻

세한 코드가 궁금하신 분들은 아래 GitHub 코드를 참고해주세요🙏🏻

 

wook2124/Algorithm-Test

Practice algorithm. Contribute to wook2124/Algorithm-Test development by creating an account on GitHub.

github.com

최종 소스코드

댓글