250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 이진탐색
- 데코레이터
- FetchType
- 유니크제약조건
- execute
- SQL프로그래밍
- 즉시로딩
- 스토어드 프로시저
- 힙
- BOJ
- 백트래킹
- eager
- PS
- exclusive lock
- 지연로딩
- querydsl
- 낙관적락
- 연관관계
- 비관적락
- 다대다
- 일대다
- shared lock
- 다대일
- dfs
- 동적sql
- 스프링 폼
- fetch
- JPQL
- CHECK OPTION
- 연결리스트
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
정렬 : compare() 직접 정의 - functools.cmp_to_key 본문
728x90
functools.cmp_to_key(func) 는 sorted() 와 같은 정렬 함수의 key 매개변수에 함수 (func) 를 전달할 떄 사용하는 함수이다.
단, func() 함수는 두 개의 인수를 입력하여 첫 번째 인수를 기준으로 그 둘을 비교하고 작으면 음수, 같으면 0, 크면 양수를 반환하는 비교 함수이어야 한다.
sorted_nums = sorted(numbers, key = cmp_to_key(compare), reverse=True)
# 1. 순서대로 좌표 정렬하기
(x, y) 좌표로 구성한 리스트가 있다.
y 좌표가 증가하는 순으로 정렬하되, y좌표가 같으면 x좌표가 증가하는 순으로 정렬하고 이를 출력하는 프로그램을 만들려면?
import functools
def xy_compare(n1, n2):
if n1[1] > n2[1]: # y 좌표가 크면
return 1
elif n1[1] == n2[1]: # y 좌표가 같으면
if n1[0] > n2[0]: # x 좌표가 크면
return 1
elif n1[0] == n2[0]: # x 좌표가 같으면
return 0
else: # x 좌표가 작으면
return -1
else: # y 좌표가 작으면
return -1
src = [(0, 4), (1, 2), (1, -1), (2, 2), (3, 3)]
result = sorted(src, key=functools.cmp_to_key(xy_compare))
print(result)
[(1, -1), (1, 2), (2, 2), (3, 3), (0, 4)]
xy_compare() 와 같이 정렬에 사용하는 함수는 반드시 다음 3가지 중 하나를 반환해야 한다. 이 때 첫 번째 인수를 기준으로 비교한다.
- 크다 : 양수 반환
- 같다 : 0 반환
- 작다 : 음수 반환
# 2. 가장 큰 수
https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from functools import cmp_to_key
def solution(numbers):
answer = ''
return answer
def compare(a, b):
# 각 수를 문자열로 바꾼 뒤, 조합하여 비교하여 더 큰 수를 반환한다.
# 예. a=3, b=30 -> t1='330', t2='303' -> int(t1) > int(t2) -> 1 반환
t1 = int(str(a) + str(b))
t2 = int(str(b) + str(a))
return (t1 > t2) - (t1 < t2)
def solution(numbers):
sorted_nums = sorted(numbers, key = cmp_to_key(compare), reverse=True)
# sorted_nums = sorted(numbers, key = cmp_to_key(lambda a, b : compare(a, b)), reverse=True)
answer = ''.join(str(x) for x in sorted_nums)
return '0' if int(answer) == 0 else answer
'Python' 카테고리의 다른 글
OCR (광학 문자 인식) 도구 : tesseract (0) | 2024.03.19 |
---|---|
파이썬 내장 Statistics 라이브러리 (1) | 2024.01.11 |
api 가져오기 (0) | 2022.06.09 |
API로 날씨 정보 가져오기 (0) | 2022.05.15 |
[PYTHON] 배열에서 가장 많이 나온 원소를 구하는 법 (0) | 2022.03.08 |