[BOJ] 백준_11650번_좌표 정렬하기_Python3백준 알고리즘2023. 12. 8. 10:11
목차
🌟 좌표 정렬하기
조건
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
1 초 | 256 MB | 128877 | 61535 | 47791 | 47.936% |
문제
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
풀이 계획
그냥 key=lambda x: (x[0], x[1])로 sorted해주면 되겠다 생각해서 풀었는데 통과는 했지만 실행시간이 4360ms로 너무나 길게 나와버렸다.
# 초기 작성 코드
import sys
read = sys.stdin.readline
def solution():
n = int(read())
points = [list(map(int, input().split())) for _ in range(n)]
sorted_points = sorted(points, key=lambda x: (x[0], x[1]))
for a, b in sorted_points:
print(a, b)
solution()
그래서 다른 빠른 방법은 없나 고민하던 중 sorted lambda를 할 필요없이 그냥 sort()를 하기만 하면 풀리는 문제여서 그렇게 적용하니 훨씬 더 빨라졌다. (348ms)
# sort()
import sys
read = sys.stdin.readline
def solution():
n = int(read())
points = [list(map(int, read().split())) for _ in range(n)]
points.sort()
for a, b in points:
print(a, b)
solution()
이후 list 대신 tuple을 사용해보니 실행시간이 더 줄어들었다..(288ms) 리스트는 가변이지만 튜플은 불변이라서 바꿔줄 수가 없고, 튜플이 메모리보다 더 적은 메모리를 차지한다는 장점이 있다. 앞으로 리스트를 사용할 일이 있을 때 튜플의 사용성도 고려해봐야겠다.
풀이
import sys
read = sys.stdin.readline
def solution():
n = int(read())
points = [tuple(map(int, read().split())) for _ in range(n)]
points.sort()
for a, b in points:
print(a, b)
solution()
728x90
반응형
LIST
'백준 알고리즘' 카테고리의 다른 글
[BOJ] 백준_11651번_좌표 정렬하기 2_Python3 (0) | 2023.12.10 |
---|---|
[BOJ] 백준_1946번_신입 사원_Python3 (0) | 2023.12.09 |
[BOJ] 백준_1920번_수 찾기_Python3 (2) | 2023.12.07 |
[BOJ] 백준_10815번_숫자카드_Python3 (1) | 2023.12.06 |
[BOJ] 백준_2108번_통계학_Python3 (0) | 2023.12.04 |
@kdj :: Childev'note
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!