백준(BOJ) 문제 풀이

[Deprecated] 백준 11650번 문제(좌표 정렬하기) 파이썬(Python) 풀이 [로밍맨]

로밍맨 2021. 8. 30. 10:11
728x90
반응형

데이터 추가로 아래 정답 코드는 오답처리 되어 영상 재촬영 하였습니다. 따라서 해당 영상과 새로운 글(https://roamingman.tistory.com/75)을 참고해주세요.

 

문제 링크

https://www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

 

정답 코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
= 100000
 
def solve():
  n = int(input())
  arr = []
  for _ in range(n):
    a, b = [int(x) + N for x in input().split()]
    tmp = a * 2 * N + b
    arr.append(tmp)
  arr.sort()
  for item in arr:
    a = item // (2 * N)
    b = item % (2 * N)
    print(a - N, b - N)
 
solve()
 
cs

 

이 문제의 상황은 현업에서 상당히 자주 맞닥뜨리는 상황입니다.

여기서는 좌표가 그 객체이지만, 좌표가 아닌 다른 임의의 객체에 대해서도 이런 식으로 정렬해야 하는 상황이 발생할 수 있습니다.

예를 들어서 Person 이라는 객체가 있고, 여기에 이름, 나이, 국적, 등의 정보가 있다고 할 때, 이러한 데이터가 많이 있을 때 이를 "크기" 에 따라 정렬해야 하는 문제라고 볼 수 있습니다.

보통은 비교를 위한 함수를 따로 작성하고 sorting 하는 함수에 비교 함수를 넣어주곤 합니다.

이렇게 풀었어야 문제의 취지에 맞았을 것 같은데;

 

728x90

 

코드나 영상을 보면 아시겠지만 저는 조금 다르게 풀었습니다.

결국 2차원을 1차원으로 변환한 다음에 정렬하고 다시 1차원을 2차원으로 변환한 것입니다.

"저렇게 풀 수도 있구나" 정도 생각해주시면 좋을 것 같습니다.

 

풀이는 아래 영상을 참고 바랍니다.

https://www.youtube.com/watch?v=2_bBFFUlIao 

 

저작권 라이선스: CC BY (출처만 표시하면 자유롭게 이용 가능)

728x90
반응형