문제 정의
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
접근 방법
정렬 기준이 나이 → 가입순서 이므로, 나이가 젊은 것부터 해당되는 이름을 출력하면 된다.
대신 가입순서도 따져야 하므로, 들어오는 순서 그대로 저장해야 한다.
딕셔너리를 활용해 나이를 key, 이름 리스트를 value로 설정했다.
문제 해설
- 들어오는 입력을 key를 나이로, value를 이름 리스트로 설정한다.
- 나이 순으로 출력해야 하므로 딕셔너리의 key 리스트를 정렬하고,
- 그 리스트를 순회하면서 해당되는 이름을 출력하면 된다.
풀이
import sys
input = sys.stdin.readline
N = int(input()) # 회원 수
member = {}
for _ in range(N):
age, name = map(str, input().split(' '))
if int(age) not in member:
member[int(age)] = []
member[int(age)].append(name)
else:
member[int(age)].append(name)
ages = sorted(member.keys())
for i in range(len(ages)):
age = ages[i]
result = member.get(age)
for r in result:
print(str(age) + ' ' + r, end = '')
다른 풀이
- 딕셔너리를 사용하지 않고 리스트로만 풀기
- 2차원 리스트로 저장해서 key값을 사용해 정렬하면 된다. 이 때 lambda 함수를 사용할 수 있다.
import sys
input = sys.stdin.readline
N = int(input())
member = []
for i in range(N):
age, name = map(str, input().split())
member.append([age, name])
member.sort(key = lambda x : int(x[0]))
for i in range(N):
print(member[i][0], member[i][1])
정리
- 정렬 함수를 잘 활용할 수 있다면 쉽게 풀 수 있는 문제!
Uploaded by N2T