import sys
n = int(input())
lst = []
for _ in range(n):
lst.append(list(map(int, sys.stdin.readline().split())))
lst.sort()
for a, b in lst:
print(a, b)
첫 번째 값이 같으면 두 번째 값을 보고 정렬을 하는 문제인데 어떻게 정렬을 할까 하다가 일단 sort() 함수를 돌려보고 결과를 볼까? 해서 써봤는데 알아서 두 번째 값까지 정렬을 해주었다.
궁금해서 다음과 같은 데이터도 넣어봤는데
5
3 3 8
1 1 0
1 1 -2
2 2 3
3 3 4
세 번째 값까지 포함해서 정렬을 해주었다.
더보기
결과
1 1 -2
1 1 0
2 2 3
3 3 4
3 3 8
sort()함수가 어디까지 정렬을 자동으로 해주는지, 왜 이런 결과가 나오는지 설명이 되어 있는 문서는 못 찾았는데 추측으로는 전부 오름차순으로 알아서 정렬을 해주는 것 같다.
다른 사람들의 풀이도 궁금해서 찾아봤는데 대부분 lambda를 사용하는 것 같다.
lambda는 함수를 간단하게 작성가능하게 해주는 표현식이다.
lst.sort(key=lambda x :x[0]) #첫 번째 인자로 오름차순 정렬
lst.sort(key=lambda x :-x[0]) #첫 번째 인자로 내림차순 정렬1
lst.sort(key=lambda x :x[0],reverse=Tre) #첫 번째 인자로 내림차순 정렬2
lst.sort(key=lambda x :x[1]) #두 번째 인자로 오름차순 정렬
lst.sort(key=lambda x :(x[0],x[1])) #첫 번째 인자로 오름차순 정렬, 같으면 두 번째 인자로
lst.sort(key=lambda x :(x[1],x[0])) #두 번쨰 인자로 오름차순 정렬, 같으면 첫 번째 인자로
lst.sort(key=lambda x :(-x[0],x[1])) #첫 번째 인자로 내림차순 정렬, 같으면 두 번째 오름차순
람다 표현식을 ( )(괄호)로 묶은 뒤에 다시 ( )를 붙이고 인수를 넣어서 람다 표현식 자체를 호출할 수 있다.
(lambda 매개변수들: 식)(인수들)
(lambda x: x + 10)(1)
더보기
11
이 람다 표현식을 이용하여 문제를 다시 풀었을 경우 코드는 다음과 같다.
import sys
n = int(input())
lst = []
for _ in range(n):
lst.append(list(map(int, sys.stdin.readline().split())))
lst.sort(key = lambda x: (x[0], x[1]))
for a, b in lst:
print(a, b)
'알고리즘' 카테고리의 다른 글
[백준] 18870 좌표 압축 - 파이썬 (0) | 2022.04.11 |
---|---|
[백준] 1181 단어 정렬 - 파이썬 (0) | 2022.04.09 |
[백준] 2018 통계학 - 파이썬 (0) | 2022.04.06 |
[백준] 10989 수 정렬하기 3 - 파이썬 (카운팅 정렬) (0) | 2022.04.05 |
[백준] 2751 수 정렬하기 2 - 파이썬 / 퀵 정렬 (0) | 2022.04.05 |