일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 변수
- Execution context
- Queue
- Algorithm
- 실행 컨텍스트
- 솔리디티
- 정렬
- react
- Javascript
- Python
- 알고리즘
- 백준
- var
- 리액트
- Interview
- BOJ
- nft
- 딥다이브
- 프로퍼티
- frontend
- blockchain
- Deep Dive
- 블록체인
- 클로저
- let
- 자바스크립트
- solidity
- 파이썬
- git pull
- 함수
- Today
- Total
공부하자
[BOJ/python] 11650. 좌표 정렬하기 본문
문제
2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
<나의 코드>
# 내가 작성한 코드
n = int(input())
arr = []
for i in range(n):
arr.append(list(map(int, input().split())))
arr.sort()
for a in arr:
for b in a:
print(b, end=" ")
print()
# 다른 분이 작성한 코드
import sys
n = int(input())
arr = []
for i in range(0, n):
arr.append(sys.stdin.readline())
arr.sort(key=lambda x: (int(x.split()[0]), int(x.split()[1])))
print(" ".join(arr))
<REVIEW>
첫번째 코드가 내가 작성한 코드이다. 딱봐도 이중 for문에 입력 받는 방식때문에 시간이 오래 걸릴 것 같았다. 문제는 무사히 통과 되었지만 예상대로 엄청난 시간이 걸렸고, 실행 속도가 더 빠른 다른 분들의 코드를 참고했다. 먼저 대부분의 빠른 코드들은 sys.stdin.readline()을 썼고, 나처럼 이중 for문 대신 sort함수에서 key= lambda를 사용했다. sys.stdin.readline()은 파이썬 표준 라이브러리인 sys를 사용해 input()보다 훨씬 더 빨리 입력을 받을 수 있다고 하니 꼭 기억해둘것!!!
그리고 특정한 요소를 기준으로 정렬하고 싶을 때는 key=lambda를 지정하는 것이 sort함수와 많이 사용되는 것 같은데 너무 자주 봐서 거의 공식 처럼 외워야 할 것 같다. 어떤 블로거 분이 친절하게 공식화 해주셔서 아래에 적어본다. 많이 써서 꼭 익숙하게 만들어야 겠다. 아래 대괄호[]에 적은 요소가 key가 되어 그 key를 기준으로 정렬된다.
sorted ([list 혹은 dic], key = lambda x: [key로 지정하고 싶은 요소])
출처: https://engineer-mole.tistory.com/94 [매일 꾸준히, 더 깊이]
<출처>
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ/python] 17425. 약수의 합 (0) | 2022.06.03 |
---|---|
[BOJ/python] 1018. 체스판 다시 칠하기 (0) | 2022.05.27 |
[BOJ/Python] 10989. 수 정렬하기 3 (0) | 2022.04.22 |
[BOJ/Python] 1152. 단어의 개수 (0) | 2021.12.12 |
[BOJ/Python] 1157. 단어공부 (0) | 2021.12.12 |