https://www.acmicpc.net/problem/11651
11651번: 좌표 정렬하기 2
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
문제
2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
해결코드
import sys
input = sys.stdin.readline
n = int(input())
li = []
for i in range(n):
xx,yy = map(int, input().split())
li.append([xx,yy])
li.sort(key=lambda x:(x[1],x[0]))
for i in li:
print(*i)
문제풀이
이 문제는 좌표 정렬 문제인데, 우선순위가 y좌표 먼저 정렬이고 그다음이 x좌표 정렬이다.
일단 sys라이브러리를 사용하고 input = sys.stdin.readline으로 간편하게 n을 입력받는다.
그리고 li라는 리스트 하나를 생성하고 n만큼 for문을 돌려 xx,yy라는 좌표 값을 받아준다.
그리고 for문을 나와서 sort를 해주는데 li가 이차원 리스트이므로
key=lambda x:(x[1],x[0]))을 해주면 x[1] 즉 y좌표값이 먼저 정렬되고 후에 x[0](=x좌표) 값이 정렬된다.
한 줄에 하나씩 출력해야 하므로 for문을 이용해서 출력해주는데
그냥 출력하면 [x, y]이런식으로 대괄호도 포함되어 나온다.
그래서 print(*i)이런식으로 출력하게 되면 unpack되어서 나온다.
'Algorithm' 카테고리의 다른 글
[알고리즘] 백준 2775 (파이썬 풀이) (0) | 2022.01.26 |
---|---|
[알고리즘] 백준 15829 (파이썬 풀이) (0) | 2022.01.25 |
[알고리즘] 백준 1436 (파이썬 풀이) (0) | 2022.01.23 |
[알고리즘] 백준 7568 (파이썬 풀이) (0) | 2022.01.22 |
[알고리즘] 백준 2805 (파이썬 풀이) (0) | 2022.01.21 |
댓글