11650
import sys
input = sys.stdin.readline #point
n = int(input())
arr = [[0 for j in range(2)] for i in range(n)]
for i in range(n):
arr[i] = list(map(int,input().split()))
arr.sort(key= lambda x: (x[0], x[1]))
for i in arr:
print(i[0], i[1])
하지만 문제에서 따로 lambda를 안쓰고 sort()만 써도 맞았다.
기본 설정이 첫번째 값부터 오름차순으로 정렬하는 것 같다.
11651
위의 코드에서 이 부분만 변경
arr.sort(key= lambda x: (x[1], x[0]))
문자열.split()
문자열을 일정한 규칙으로 잘라서 리스트로 만들어 주는 함수
- split(): 공백을 기준으로 문자열을 나눔 (여러개의 공백도 하나의 구분자로 판단)
- split(separator): 지정한 구분자를 기준으로 문자열을 나눔
- split(separator, maxsplit): 지정한 구분자를 기준으로 최대 maxsplit번 문자열을 나눔
map
map(function, iterable)
- function: 반복 가능한 객체의 각 요소에 적용할 함수
- iterable: 반복 가능한 객체 (리스트, 튜플 등)
lambda를 적용한 map
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(lambda x: x * x, numbers)
print(list(squared_numbers)) # 출력: [1, 4, 9, 16, 25]
여러개 반복 가능한 객체를 동시에 처리 가능
def add(x, y):
return x + y
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
result = map(add, numbers1, numbers2)
print(list(result)) # 출력: [5, 7, 9]
주의사항!
map() 함수는 결과를 바로 리스트로 반환하지 않고, map 객체를 반환한다.
이를 리스트나 다른 반복 가능한 객체로 변환하려면 list()나 tuple() 함수를 사용해야 한다!
문제에 적용
arr[i] = list(map(int,input().split()))
- split() : 한 줄의 입력을 공백을 기준으로 나누어 문자열 리스트로 변환
- map : 문자열 리스트의 각 요소를 정수로 변환
#이 방법도 있다
[a, b] = map(int, input().split())
li.append([a, b])
- [a, b] = map(int, input().split())는 map 객체의 요소들을 언패킹하여 a와 b에 할당
- li.append([a, b])는 a와 b를 리스트로 묶어 li 리스트에 추가
굳이 list()로 감싸주지 않아도 이렇게 [a,b]를 선언하여 리스트로 저장할 수 있다.
*패킹(Packing): 여러 개의 값을 하나의 변수에 묶는 것.
packed = 1, 2, 3
print(packed) # 출력: (1, 2, 3)
*언패킹(Unpacking): 하나의 변수에 묶인 여러 값을 개별 변수에 분해하여 할당하는 것.
a, b, c = packed
print(a, b, c) # 출력: 1 2 3
sys.stdin.readline
표준 입력에서 한 줄을 읽어오는 함수로, 대규모 입력을 처리할 때 효과적이다!
input()을 쓸때는 시간이 4344ms 였는데,
sys.stdin.readline을 쓰니 396ms로 확연히 줄어든 것을 볼 수 있다.
input() 보다 시간이 줄어든 이유?
- input()은 파라미터로 prompt message를 받을 수 있다
- input()은 입력받은 값의 개항 문자를 삭제시켜서 리턴한다.
반면 sys.stdin.readline에서는 prompt message를 인수로 받지 않으며, 개항 문자를 포함한 값을 리턴한다.
*prompt message: 사용자에게 입력을 요청할 때 화면에 표시되는 메시지
name = input("Enter your name: ")
따라서 백준에서 문제를 풀 때, 굳이 프롬프트 메세지가 필요없다면 sys.stdin.readline 을 쓰는게 더욱 효과적이다!!
'Algorithm' 카테고리의 다른 글
[1193] 분수찾기 (0) | 2024.07.09 |
---|---|
[1181] 문자열 리스트 정렬, 중복 제거 (0) | 2024.07.08 |
[4673] 재귀함수를 사용한 셀프넘버 (0) | 2024.07.05 |
[1316] Python 문자열 찾는 함수 in (0) | 2024.07.04 |
파이썬 기본 문법 정복하기! / C언어랑 파이썬 비교 (2) | 2024.02.19 |