본문 바로가기

컴퓨터/코딩

python에서 특정 조건으로 정렬하기

프로그래머스의 가장 큰 수라는 문제를 풀어보았다.

 

이 문제는 숫자배열이 주어졌을 때 숫자를 이어붙어서 가장 큰 숫자를 만드는 문제였다.

 

처음에 이 문제를 보고 일반적인 사전순서대로의 정렬을 사용하면 ["656", "65"]의 경우 ["65", "656"]으로 정렬이 되지만 이 문제에서는 ["656", "65"]형태로 정렬되야함으로 새로운 정렬 방식을 적용해야 한다고 생각하였다.

 

그래서 새롭게 병합 정렬을 정의하여 문제를 아래와 같이 해결하였다.

 

https://github.com/SIDED00R/Code_training

 

GitHub - SIDED00R/Code_training: This is a auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://git

This is a auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - GitHub - SIDED00R/Code_training: This is a auto push repository fo...

github.com

 

하지만 이러한 방법 외에도 cmp_to_key() 함수를 이용해서 새롭게 정렬을 만들 수 있다는 것을 알게 되었다.

 

일반적으로 sorted()에서 key의 파라미터로 lambda 함수를 이용해 원소를 정렬 하는데

import functools

먼저 functools 모듈을 가져와 cmp_to_key를 쓸 수 있게 하고

def compare(a, b):
    if a > b:
    	return 1
    elif a < b:
    	return -1
    else:
    	return 0
    
key=functools.cmp_to_key(compare)

이와 같이 key값에 cmp_to_key(내가 만든 정렬 규칙)을 하면 나의 커스텀 정렬이 된다.

이때 compare함수에서 1이 출력 된다면 앞의 숫자가 나의 정렬 기준에서 더 큰 숫자이고, -1이 출력 된다면 뒤의 숫자가 더 큰 숫자라는 것을 의미한다.