본문 바로가기

Coding Test

[Programmers] 가장큰수

728x90
반응형

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이과정

python sort 함수에서 key인자에 원하는 정렬 방식을 넣어줌으로써 다양한 정렬을 적용할 수 있다. 

기본적인 정렬 컨셉은 앞의 수와 뒤의 수를 붙인 숫자와, 순서를 뒤집어서 붙인 숫자를 비교해서 전자가 크면 -1을 반환, 후자가 크면 1을 반환, 동일하면 0을 반환하여 순서를 조정하도록 하였다. 

추가적으로 list를 선회하며 앞, 뒤의 수를 비교하도록 하기 위해 python 내장 패키지인 functools의 cmp_to_key를 사용했다. python 내장 함수를 이용하면 좀 더 심플하게 구현하고자 하는 로직을 짤 수 있을 것 같다.

https://sha-sha-sha.tistory.com/19

 

Python functools 모듈의 내장함수[기본]

functools 모듈은 python 표준 라이브러리 중 하나로써 다른 함수에 적용하거나 다른 함수를 반환하는 고차 함수를 위한 모듈이다. functools 모듈의 함수를 잘 사용한다면 더 심플하면서 풍부한 표현

sha-sha-sha.tistory.com

추가로 list의 모든 값이 0인 경우 "0000.."이 되는 결과를 "0"으로 반환하는 예외 처리를 적용 해 주어야 한다.

 

Script

from functools import cmp_to_key

def compare(x, y):
    result = int(str(x)+str(y)) - int(str(y)+str(x))
    if result > 0:
        return -1
    elif result == 0:
        return 0
    else:
        return 1

def solution(numbers):
    result = sorted(numbers, key=cmp_to_key(compare))
    answer = ''.join([str(x) for x in result])
    
    answer = '0' if int(answer) == 0 else answer
    
    return answer
728x90
반응형

'Coding Test' 카테고리의 다른 글

[Programmers] 더 맵게  (0) 2022.11.01
[Programmers] 올바른 괄호  (0) 2022.09.14
[Programmers] 도둑질  (0) 2022.08.04
[Programmers] 기능개발  (0) 2022.07.20
[Programmers] 포켓몬  (0) 2022.07.19