이 문제는 입력한 숫자만큼 사람들의 나이와 이름을 입력받아서 나이순으로 정렬하는 문제이다.
이번 문제는 풀 때 약간 까다로운 조건들이 있었다.
처음에 두개의 값을 딕셔너리에 쌍으로 저장해서 정렬하는 방식으로 풀려고 했는데 딕셔너리는 중복키를 가질 수 없어서
동일한 나이가 입력된 경우에 나중에 입력한 value값으로 바뀌게 된다.
그래서 2차원 배열을 사용해서 풀기로 하였다.
n = int(input())
members = [[0 for x in range(2)] for y in range(n)]
for i in range(n):
age, name = input().split(' ')
members[i][0] = int(age)
members[i][1] = name
2차원 배열을 어떻게 초기화 해야할지 방법을 검색해 보니깐 위와 같은 방법을 알려주어서 적용해 보았다.
근데 나중에 다른 사람들이 푼거 보니깐 그냥 map 함수를 이용해서 공백으로 분리한 후에 정수형으로 변환해 주는 방식으로 푼 사람도 있었다. 그 방식이 더 쉬울거 같긴하다.
for 반복문을 이용해 입력한 값만큼 나이와 이름을 입력받아서 각 열의 인덱스 0와 1에 저장해준다.
그리고 sort함수를 이용해서 정렬을 했는데 결과에 출력할 때 나이가 같으면 먼저 가입한 사람을 출력해야한다는 조건이 있어서 sort함수만 사용하게 되면 뒤에 이름도 알파벳순으로 정렬되어서 오류가 난다.
그래서 나이 인덱스를 기준으로 정렬을 해야한다. 특정 인덱스를 기준으로 정렬하는 방법을 검색해 보니 람다함수를 이용하는 것이였다.
members.sort(key = lambda x:x[0])
[['20', 'Sunyoung\n'], ['21', 'Junkyu\n'], ['21', 'Dohyun\n']]
람다 함수를 이용해서 정렬한 결과이다.
여기서 또 문제가 발생하는데 개행문자를 포함하고 있어서 나중에 결과값을 출력할 때 엔터가 포함되서 출력이 된다.
그래서 strip함수를 이용해서 개행문자를 제거하였다.
for i in range(n):
print(members[i][0], members[i][1].strip())
<전체코드>
import sys
input = sys.stdin.readline
n = int(input())
members = [[0 for x in range(2)] for y in range(n)]
for i in range(n):
age, name = input().split(' ')
members[i][0] = int(age)
members[i][1] = name
members.sort(key = lambda x:x[0])
# print(members)
for i in range(n):
print(members[i][0], members[i][1].strip())
'백준 문제풀이' 카테고리의 다른 글
[백준 18258번 문제] 큐 2 (0) | 2022.08.21 |
---|---|
[백준 2477번 문제] 참외밭 (0) | 2022.08.19 |
[백준 4153번 문제] 직각삼각형 (0) | 2022.08.12 |
[백준 3009번 문제] 네 번째 점 (0) | 2022.08.11 |
[백준 1427번 문제] 소트인사이드 (0) | 2022.08.10 |