깡뇽

[백준] 11650번 좌표 정렬하기 파이썬 본문

Algorithm/BAEKJOON

[백준] 11650번 좌표 정렬하기 파이썬

깡뇽 2022. 1. 28. 23:46
반응형

첫줄 : 입력할 점의 개수 N

N줄 : 점( x와 y 값 )

입력받은 점을 x부터 정렬, x가 같으면 y에 따라 정렬

 

2845번 파티가 끝나고 난 뒤 풀이

 

[시도1] pypy3 시간 초과

n = int(input())
numbers = []

for i in range(0, n):
  a, b = map(int, input().split())
  numbers.append([a,b])
  numbers.sort()

for i in range(0, n):
  num = numbers[i]
  a = num[0]
  b = num[1]
  print(str(a) + ' ' + str(b))

 

[시도2] pypy3 시간 초과

import sys

n = int(sys.stdin.readline())
numbers = []

for i in range(0, n):
  a, b = map(int, sys.stdin.readline().split())
  numbers.append([a,b])
  numbers.sort()

for i in range(0, n):
  num = numbers[i]
  a = num[0]
  b = num[1]
  print(str(a) + ' ' + str(b))

입력방식을 input()에서 sys.stdin.readline()으로 바꾸어 시간을 단축해보려고 했으나 바꾼 코드도 시간초과가 났다.

 

[시도3] pypy3 맞았습니다!

import sys

n = int(sys.stdin.readline())
numbers = []

for i in range(0, n):
  a, b = map(int, sys.stdin.readline().split())
  numbers.append([a,b])
  
numbers.sort()

for i in range(0, n):
  num = numbers[i]
  print(str(num[0]) + ' ' + str(num[1]))

sotr()를 for문 밖에서 해주어서 복잡도를 낮춰주었다.

주변 알고리즘 고수에게 물어봤더니 [시도2]는 for문 안에 정렬을 하므로 N^2logN의 복잡도를 가지고, [시도3]처럼 for문 이후에 정렬을 하게되면 NlogN의 복잡도를 가진다고 한다.

 

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

 

반응형