백준 알고리즘

백준 11651번 좌표 정렬하기2 문제풀이, 파이썬

고인호 2023. 3. 5. 23:26
반응형

백준 11651번 : 좌표 정렬하기2 문제풀이 [파이썬] 


<문제>

 

11651번 문제의 내용은 아래와 같습니다. 

 

좌표 정렬하기 2 

 
 

문제

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

입력

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

출력

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

예제 입력 1 복사

5
0 4
1 2
1 -1
2 2
3 3

예제 출력 1 복사

1 -1
1 2
2 2
3 3
0 4

 

 

<작성한 코드>

 

N = int(input())
num = []
for _ in range(N):
  x, y = map(int, input().split())
  num.append((x,y))
num = (sorted(num, key = lambda x:(x[1],x[0])))

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

 

 

<코드 풀이>

앞선 11650번 좌표 정렬하기 문제와 동일한 형식의 문제다

2023.03.05 - [백준 알고리즘] - 백준 11650번 좌표 정렬하기 문제풀이, 파이썬

 

백준 11650번 좌표 정렬하기 문제풀이, 파이썬

백준 11650번 : 좌표 정렬하기 문제풀이 [파이썬] 11650번 문제의 내용은 아래와 같습니다. 좌표 정렬하기 문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면

inho3213.tistory.com

 

달라진 점은 주어진 x, y좌표 중 x 좌표가 아닌 y좌표를 기준으로 오름차순 정렬한다는것. 

사실 그전에는 sort() 함수만 사용하면 알아서 이차원 배열을 오름차순으로 정렬해주었는데

이번 문제는 x가 아닌 y를 먼저 기준으로 정렬한다는 점에서 차이가 있다. 

 

따라서 본 문제를 해결하기 위해서 lambda 식을 사용해 정렬 기준을 정해주었다. 

 

N = int(input())
num = []
for _ in range(N):
  x, y = map(int, input().split())
  num.append((x,y))

문제에서 주어진 조건에 맞게 

처음 부분은 위와 같이 코드를 작성해주었다. 

 

 

num = (sorted(num, key = lambda x:(x[1],x[0])))

다음으로는 sorted()함수를 사용해주었는데,

이때 lambda식을 사용해 정렬의 기준의 정해주었다. 

y좌표를 기준으로 먼저 정렬하고, y좌표의 값이 같을 경우에는

x좌표를 기준으로 정렬을 해야하기 때문에 위와 같이 작성해주었다. 

 

 

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

문제에서 요구하는 출력 예제에 맞추기 위해서

출력 부분은 위와 같이 작성해주었다. 

반응형