알고리즘

백준 알고리즘 11651 [파이썬]

Brad Daeho Lee 2021. 3. 9. 22:25

 

 

배운 내용

숫자나 문자를 정렬할 때 sort 사용법에 대해서 배웠다. sort() 함수 만으로 생각보다 할 수 있는것이 많았다. [x, y]라는 숫자값이 여러개가 있는 리스트에서 x 크기가 작은 순서대로 x 크기가 같을 때는 y 크기가 작은 순서대로 정렬시킬 때 리스트.sort() 만 하면 된다. 그러면 알아서 정렬시켜준다. 

 

 

문제 

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

 

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

 

문제풀이

1. sort에 key값을 사용해서 푼 풀이

N = int(input())
lst = []
for i in range(N):
  [x,y] = map(int ,input().split())
  lst_xy = [x,y]
  lst.append(lst_xy)

lst.sort(key=lambda k: (k[1], k[0])) # key=lambda를 사용하면 숫자 크기 기준으로 나열되게한다.
# k: (k[1], k[0]) 값은  리스트가 정렬되는 기준이 y값의 크기가 먼저 우선이고 y값이 같을 때 x값의 크기로 정렬된다는 뜻이다.
for i in lst:
  print(i[0], i[1])

2. sort 만 가지고 푼 풀이

N = int(input())
lst = []
for i in range(N):
  [x,y] = map(int ,input().split())
  lst_xy = [y,x]
  lst.append(lst_xy)

lst.sort()
for i in lst:
  print(i[1], i[0])