[Python / 파이썬] 백준 10814번

재수강은방학때·2021년 4월 17일
3

백문 문제풀이

목록 보기
2/2
post-custom-banner

문제 링크 : 백준 10814번

요약

  1. 파이썬은 stable sort를 한다.

10814번

입력 받은 값을 숫자가 높은 순서대로 정렬하고, 같은 숫자가 있는 경우에는 먼저 들어온 값을 그대로 앞에 두어 정렬하는 문제다.

이 문제에서 짚고 넘어가야 하는 점은, stable 정렬unstable 정렬 방식이다.
stable 정렬은 말 그대로 안정 정렬이다. 안정 정렬에서는 입력 받은 값들 중에 같은 값이 있는 경우 해당 값의 순서를 그대로 유지한다.
예를 들어, [1, 2, 3(X), 4, 5, 3(Y)] 을 오름차순 정렬한다면, [1, 2, 3(X), 3(Y), 4, 5]순으로 세 번째 위치한 3의 위치와 여섯 번째 위치한 3의 위치가 바뀌지 않는다. unstalbe 정렬에서는 이러한 정렬을 장담할 수 없다.
파이썬은 기본적으로 stalbe 정렬을 한다는 점을 알아두면 좋다.

n = int(input())
member_lst = []

for i in range(n):
    member_lst.append(input())

member_lst.sort(key = lambda x : x[:3])	## 입력값 앞 세자리만 비교해 정렬

for i in member_lst:
    print(i)

입력값 맨 앞에는 나이가 자리하니까, 맨 앞 세자리만 비교해 정렬하면 되겠지, 하는 안일한 생각으로 제출한 오답.
나이를 한 자릿수만 입력하는 경우엔, 문자열 맨 앞 첫 자리까지 비교값으로 들어오기 때문에 오답으로 분류됐다.

n = int(input())
member_lst = []

for i in range(n):
    age, name = map(str, input().split())
    age = int(age)
    member_lst.append((age, name))

member_lst.sort(key = lambda x : x[0])	## (age, name)에서 age만 비교

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

나이와 이름을 한꺼번에 받아서 간편하게 비교하고 싶었는데, 나이 자릿수 때문에 복잡해졌다. 그래서 그냥 이름과 나이를 각각 받아서 list형태로 묶어서 저장하는 식으로 바꾸었다.

profile
베짱이는뚠뚠오늘도뚠뚠열심히뚠뚠일을한다
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 9월 7일

코드도 블로그도 모두 최고네요 ㅎㅎ!

답글 달기