생각하는 아져씨

[BOJ] 10814 - 나이순 정렬 본문

Study/Algorithm

[BOJ] 10814 - 나이순 정렬

azeomi 2023. 4. 14. 10:05
10814번: 나이순 정렬
https://www.acmicpc.net/problem/10814

문제 정의


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

접근 방법


정렬 기준이 나이 → 가입순서 이므로, 나이가 젊은 것부터 해당되는 이름을 출력하면 된다.

대신 가입순서도 따져야 하므로, 들어오는 순서 그대로 저장해야 한다.

딕셔너리를 활용해 나이를 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

'Study > Algorithm' 카테고리의 다른 글

BOJ] 14501 - 퇴사  (0) 2023.04.14
[BOJ] 2559 - 수열  (0) 2023.04.14
[BOJ] 1717 - 집합의 표현  (0) 2023.04.14
[BOJ] 1149 - 연속합  (1) 2023.04.13
[BOJ] 9461 - 파도반 수열  (0) 2023.04.13