#10814

zzwwoonn·2022년 5월 17일
0

Algorithm

목록 보기
26/71

사실 처음에는 sort 와 sorted 메서드에 대해 잘 모르고 있었다. print 찍어가면서 나오는 거 확인해보고 문제에 조금씩 접근하고 있었다.

정렬 문제는 처음이었기 때문에 sort와 sorted 메서드에 대해 공부 한번 해보고? 문제를 다시 보는 것도 나쁘지 않다고 생각했다(문제를 다 풀고 나니 꼭 그래야만 했었더라)

sort와 sorted 메서드에 대해서는 바로 이전 글에 기록해두었다.

이 문제의 핵심은 다음과 같다.

나이가 증가하는 순으로, 나이가 같으면 먼저 기입한 사람이 앞에 오는 순서로

이것은 sort 메서드에 대해 공부를 했다면 아무것도 아닌 조건이라고 이해하고 넘겼을 것이고 sort 메서드를 몰라서 배열을 하나씩 순회하며 값을 비교하는.. 그런 알고리즘을 짰다면 엄청 오래 걸렸을 것이다 (그렇게 푼 사람들이 있을까?)

파이썬의 정렬(sort, sorted)는 안정적(stable)임이 보장된다. 즉, 여러 레코드가 같은 키를 가질 때, 원래의 순서가 유지된다.

따라서 별 다른 조건 없이 바로 sort 메서드를 사용하면 답이 나올 것이다.

records = []

for i in range(int(input())):
    records.append(list(input().split()))

# print(records)

records = sorted(records, key = lambda x : x[0])

# print(records)
for record in records:

처음엔 틀렸습니다가 나오더라... 도대체 왜?

key 매개변수에서 문제가 있다. 입력은 문자열이고 key 매개변수의 람다 표현식에 들어가서 나오는 결과는 사람들의 나이(문자열!!!) 일 것이다.

따라서 젤 앞자리를 보고 비교를 하게 되니 1의 자리 숫자는 비교가 똑바로 되지 않는다.

key = lambda x : int(x[0]) 와 같이 명시적으로 형 변환을 해줌으로써 해결했다.

다 풀고 나서 다른 사람들의 풀이를 봤는데 배열을 돌면서 나이를 다시 저장해주는 등의... 뭐 이런 저런 번거로운 작업을 다시 해준 사람들이 꽤 있었다.

int(x[0]) 를 생각해냈다는 내 자신이 조금 뿌듯했다.

0개의 댓글