[BOJ/백준-Python]11650번 - 좌표 정렬하기

11650번 - 좌표 정렬하기

문제

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

입력

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

출력

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

예제 입력 1

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

예제 출력 1

1 -1
1 1
2 2
3 3
3 4

##


해결할 방법을 생각해보자.💡

sort()를 사용해서 오름차순으로 정렬해야하는 문제다.

하지만 어떤 점이 다른지를 파악해야 한다. 바로 두 가지 수를 가지고 있는 것들을 비교해서 정렬해야 한다는 것이다.

N번 만큼 수들을 받을 때, 각각 두 개의 수를 받는다. 이 때, 첫 번째 받는 수가 같은 경우에는 두 번째 수가 더 낮은 것이 먼저 출력되야하는 형태다.

두 개의 수를 N번 만큼 받아서 하나의 리스트에 요소로 추가해주는데, 이 때 두 개의 수를 리스트로 묶어서 리스트 안의 리스트 요소와 같은 구조로 만들어줘야한다.

입력받은 값을 따로따로 리스트로 구분할 경우에는 출력이 꼬일 수도 있기 때문이다.

나도 처음 코드를 짰을 때는 예제의 입력과 출력과 똑같이 나와 제출해보았지만 틀렸다고 나왔다.

코드는 이렇다.

import sys

N = int(sys.stdin.readline())

X = []
Y = []

for i in range(N):
  x, y = map(int, sys.stdin.readline().split())
  X.append(X)
  Y.append(Y)

for x, y  in zip(sorted(X), sorted(Y)):
  print(x, y)

만약 입력값이 이렇게 주어진다고 생각해보자.

2
4 1
2 2

내가 처음 제출했던 코드는, 출력이 이렇게 나올 것이다.

2 1
4 2

하지만 문제에서 원하는 것은 입력받았던 짝꿍 그대로의 수들을 원하는 것이다.

2 2
4 1

이런 형태로 말이다.

문제 해결을 하기위해서는 sort의 파라미터를 사용해야한다.

sort()의 파라미터로는 reverse와 key가 들어갈 수 있다.

key는 어떠한 것들을 기준으로 정렬할 것인지 조건을 부여할 수 있게 만들어주는 파라미터다.

따라서 우리는 첫번째 수를 기준으로 오름차순을 잡은 후, 첫 번째 수가 같을 경우는 두 번째 수를 비교해 오름차순으로 나오도록 만드는 코드를 이렇게 작성할 수 있다.

num_lst = []

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

num_lst.sort(key = lambda _ : (_[0],_[1]) )

람다 함수를 사용해서 key(정렬 기준)을 정해줄 수 있으며, 기준을 여러 개를 잡고 싶을 경우에는 튜플(Tuple)을 사용하자.

코드💻

import sys

N = int(sys.stdin.readline())

num_lst = []

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

num_lst.sort(key = lambda _ : (_[0],_[1]) )

for j in num_lst:
  print(j[0], j[1])

해결 로그

문제 푼 날짜 체크
2022-07-05
   
   
   
   

2022

[web]jQuery 복습 3

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

13 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

14 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

5 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

10 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑