[BackJoon] 11650번, 11651번 좌표 정렬하기

KyeongHun Kim·2024년 1월 15일

Coding Test 연습

목록 보기
8/14
post-thumbnail

11650번 문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

입력과 출력

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

풀이

  1. python의 sort함수는 오름차순, 앞부터 정렬을 기준으로 하고 있기 때문에 좌표를 입력 받아 sort함수를 사용하면 됨.
import sys
N = int(input())
matrix = []

for _ in range(N):
    x, y = map(int, sys.stdin.readline().split())
    matrix.append([x,y])

matrix.sort()

for i in range(N):
    print(matrix[i][0], matrix[i][1])

11651번 문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

풀이

  1. 위의 문제와는 다르게 y좌표, 뒤의 것을 기준으로 정렬하는 문제임.
  2. sort함수의 key를 설정하여 기준을 변경할 수 있음.
  3. lambda식을 사용하여 함수를 정의할 수 있음.
import sys
N = int(input())
matrix = []
for _ in range(N):
    x, y = map(int, sys.stdin.readline().split())
    matrix.append([x,y])

matrix.sort(key = lambda x: (x[1], x[0]))
for i in range(N):
    print(matrix[i][0], matrix[i][1])
profile
기본에 충실하자!

0개의 댓글