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())
if (n < 1 or n > 100000):
exit()
li = []
for _ in range(n):
[a, b] = map(int, input().split())
li.append([b, a])
li.sort()
for i in range(n):
print(li[i][1], li[i][0])
풀이
11650 문제와 비슷한 점이 너무나도 많은 문제이다.
1~2행 : input() 을 일반적으로 사용하게 된다면 타입 아웃이 나올 수 있기에 sys 를 import 해줌으로서 sys.stdin.readline 을 사용할 수 있게끔 만들어주었고 그것을 input 에 대입해 줌으로서 input() 을 사용하는데 타입 아웃을 막아줄 수 있다.
import sys
input = sys.stdin.readline
4~6행 : 입력값을 하나 받아 변수 n 에 저장한다. 만일 입력받는 값이 1보다 작거나 100,000보다 크다면 프로그램은 종료된다.
n = int(input())
if (n < 1 or n > 100000):
exit()
8~11행 : 변수 li 를 리스트로 선언해준다. n 만큼 반복을 하며 a 와 b 에 입력을 받는데 a 와 b 순서로 입력을 받은 것을 b 와 a 처럼 반대로 돌려 리스트에 저장시켜준다.
ex) 1 5 가 입력이 되었다면 li[0][0], li[0][1] 에는 5 1 이 저장이 된다.
li = []
for _ in range(n):
[a, b] = map(int, input().split())
li.append([b, a])
13행 : b 의 값을 기준으로 하여 리스트를 정렬해준다.
li.sort()
15~16행 : n 번 만큼 반복을 하면서 리스트에 저장된 값들을 출력해준다. 단, 두 번째에 저장된 값을 먼저 출력해 줌으로서 a 에 저장되었던 값을 앞에 출력하고 b 에 저장되었던 값을 뒤에 출력해준다.
10행 입력 때부터 어떻게 변화가 되는지 아래 예시를 봐보자.
ex) 1 5 입력 -> 5 1 저장 -> 1 5 출력
for i in range(n):
print(li[i][1], li[i][0])
'BaekJoon > 단계별로 풀어보기' 카테고리의 다른 글
[백준] 정렬 - 10814번 (Python) (0) | 2023.02.18 |
---|---|
[백준] 정렬 - 1181번 (Python) (1) | 2023.02.14 |
[백준] 정렬 - 11650번 (Python) (0) | 2023.02.12 |
[백준] 정렬 - 1427번 (Python) (0) | 2023.02.10 |
[백준] 정렬 - 2108번 (Python) (0) | 2023.02.09 |