문제
https://www.acmicpc.net/problem/11650
11650번: 좌표 정렬하기
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
나의 풀이
n=int(input())
nList=[[0 for _ in range(2)] for _ in range(n)]
for i in range(n):
nList[i][0],nList[i][1]=map(int,input().split())
nList.sort(key=lambda x: (x[0], x[1]))
for i in range(n):
print(nList[i][0],nList[i][1])
2차원 배열을 정렬하기 위해 sort함수에서의 key와 lambda를 사용하여 정렬하였다.
특정 기준으로 배열을 정렬하는 방법은 크게 3가지가 있다.
1. key가 하나일 때
x를 기준으로 정렬하기
arr = ['abc', 'bac', 'bca']
sorted(arr, key=lambda x : x)
arr에 속하는 각 원소들을 x라고 생각했을 때, x[0]을 기준으로 정렬하기
arr = ['abc', 'bac', 'bca']
sorted(arr, key=lambda x : x[0])
2.key가 여러개일 때
x[0]를 기준으로 정렬하고 같을 경우 x[1]를 기준으로 정렬하기
arr = ['abb', 'acc', 'bcd']
sorted(arr, key=lambda x : (x[0], x[1]))
3. 내림차순 정렬
x[0]는 내림차순, x[1]는 오름차순을 기준으로 정렬하기
arr = ['abb', 'acc', 'bcd']
sorted(arr, key=lambda x : (-x[0], x[1]))
다른 사람의 풀이
for p in sorted([tuple(map(int,input().split())) for i in range(int(input()))]):
print(p[0], p[1])
list comprehension을 사용한 풀이를 하였다.
'알고리즘 공부' 카테고리의 다른 글
백준 2257번, 스택 알고리즘 (0) | 2023.01.27 |
---|---|
백준 1181번 sort와 key (0) | 2023.01.10 |
백준 2108, Counter, list comprehension (0) | 2023.01.08 |
백준 9020번, filter와 lambda (0) | 2023.01.02 |
시간복잡도 구하기 (0) | 2022.12.31 |
댓글