boj-10814(나이순 정렬)

황윤기·2021년 8월 18일
0

boj 정렬

목록 보기
4/5

나이순으로 정렬하는 문제다.

문제를 제대로 읽지않아서, 5번이나 다시 제출했다.

첫번째 구성

첫번째 구성은 이전에 word 정렬문제를 구성하는것처럼 dict 형태로 해보려고 했다.
하지만 word와는 다르게, 사람은 같은 이름의 사람이 존재하고, 나이가 다를 수 있다라는 반례를 생각하지 않아서 틀렸다.

두번째 구성

두번째 구성으로 list형태로 만들어서, age와 name 을 넘겨주는 식으로 풀이를 했는데 결과는 잘 나오는데 맞았습니다가 절대 안나오는 것이다.
스트레스 받아서 왜인지 생각하다보니, 나이는... 정수이다... 정수 input 으로 그냥 받으면 string 형으로 입력을 하게 되니까.. 절대 패스가 안된다.

세번째 구성

age를 string으로 받고 append 할 때 int형으로 해주고 출력하니까 맞았습니다..

주의할 점

이 문제는 sort할 때 stability를 보장해야하는 문제인데, merge sort 같은 안정성을 보장하는 정렬을 직접 구현하여 풀 수도 있겠지만, 귀찮기 때문에 그냥 파이썬 내장 정렬함수 sorted() 를 이용해서 풀었더니 그냥 패스가 뜨길래 잘 마무리 지은 것 같다..

sorted() 함수가 어떤 알고리즘으로 sort 하는지는 잘 모르겠지만, 듣기로는 O(nlogn)O(nlogn)을 갖는다고 해서 직접 구현하는 것보다 이용하는게 편리할 것 같다고 생각하여, 그냥 내장함수를 이용했다.

N = int(input())
num_list = []
for i in range(N):
    age, name = list(input().split(" "))
    num_list.append([int(age), name])
sort_list = sorted(num_list, key= lambda x: x[0]) # age를 키로 사용하여, 정렬
for i in range(len(sort_list)):
    print(sort_list[i][0], sort_list[i][1])

profile
안녕하십니까

0개의 댓글