250x250
Notice
Recent Posts
Recent Comments
Link
멋쟁이v의 개발일지
[백준 11650번] 좌표 정렬하기(파이썬) 본문
728x90
320x100
문제
2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
예제 입력
5
3 4
1 1
1 -1
2 2
3 3
예제 출력
1 -1
1 1
2 2
3 3
3 4
풀이
이 문제는 좌표 x, y가 주어지면 x를 먼저 정렬하고, y를 정렬한다는 문제입니다.
만약 좌표 3개가 주어진다면 먼저 이 좌표를 리스트로 만들어 줍니다.
[[3, 4], [1, 1], [1, -1]]
이렇게 리스트 안에 또 다른 리스트가 들어가게 되는데 이대로 정렬을 해주게 되면
[[1, -1], [1, 1], [3, 4]]
x, y 좌표가 정렬이 됩니다. 하지만 출력은 리스트를 벗어내야 하는데요.
정렬된 리스트를 일반적인 인덱싱으로 출력을 한다면
[0] = [1, -1]
[1] = [1, 1]
[2] = [3, 4]
[1, -1], [1, 1], [3, 4] -> 리스트형태로 출력
만든 리스트 형태가 이중 리스트 형태라서 [x][y] 형태로 출력을 해야 각각의 원소들을 뽑아낼 수 있어요.
[0][0] = 1, [0][1] = -1
[1][0] = 1, [1][1] = 1
[2][0] = 3, [2][1] = 4
이렇게 인덱싱을 해주면 리스트를 벗어나서 원하는 출력이 가능합니다.
정답 : 1 -1 / 1 1 / 2 2 / 3 3 / 3 4
코드를 순서대로 작성한다면
1. x, y좌표를 담을 빈 리스트 선언
2. x, y좌표를 입력 후 리스트에 추가
3. 정렬
4. 인덱싱해서 각 원소들을 출력
작성 코드
import sys N = int(input()) arr = [] for _ in range(N) # x, y 좌표를 리스트에 추가 a, b = map(int, sys.stdin.readline().split()) arr.append([a, b]) arr.sort() # 정렬 for i in range(N): print(arr[i][0], arr[i][1]) # 리스트 원소(x좌표, y좌표)들을 뽑아내서 출력
728x90
320x100
'0년차 > 알고리즘(정렬)' 카테고리의 다른 글
[백준 18870번] 좌표 압축(파이썬) (0) | 2022.12.06 |
---|---|
[백준 1181번] 단어 정렬(파이썬) (0) | 2022.12.05 |
[백준 2108번] 통계학(파이썬) (0) | 2022.12.05 |
[백준 10989번] 수 정렬하기3(파이썬) (0) | 2022.12.04 |
[백준 2751번] 수 정렬하기2(파이썬) (0) | 2022.12.04 |
Comments