[Programmers / Python / 정렬] - 가장 큰 수

Young·2021년 5월 9일
0

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

def solution(numbers):
    answer = ''
    toStr = sorted(map(str, numbers), reverse=True)
    for i in toStr:
        answer += i  
    return answer

처음에는 단순하게 각 원소를 str type으로 변환 후 정렬하면 되겠다고 생각해서 위와 같이 작성했다.

[3, 30]를 str type으로 변환 후 정렬하면 ['30', '3'] 이다. 하지만 303보다 330이 큰 수 이므로 오류가 생겼고 정렬 시 ['3', '30']로 나오도록 수정해야 했다.

numbers.sort(key = lambda x: x+"1",reverse=True)

0으로 끝날 때만 해결해주면 된다고 생각해서 정렬 시 각 원소에 "1"을 더한 기준으로 정렬해주었다.
입력 값이 [3, 30, 34, 5, 9] 라면 str 변환 후 "1"씩 더하면
['31', '301, '341', '51', '91'] 이므로
이를 기준으로 정렬하면 ['9', '5', '34', '3', '30']이 된다.
코드 실행 2가지 케이스는 성공하였지만 제출 후 실행하기에서는 실패가 나왔다.
위와 같은 경우 실패가 발생하는 코드였다. 그래서 특정한 수를 붙이는게 아니라 곱해야겠다고 생각했다.

문제 조건을 보면 원소가 0이상 1000이하라고 되어있으므로 str으로 변환한 원소를 각각 *3씩 해준 후 정렬하는 코드를 작성했다.

answer에 원소를 넘겨주는 부분도 for문이 아닌 join 함수를 사용하는 것으로 변경했다.

def solution(numbers):
    answer = ""
    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x:x*3,reverse=True)
    answer = ("".join(numbers))
    return answer

테스트 케이스 1개에서 실패가 발생했는데 도저히 이유를 찾지 못해서 구글링 해봤다...

검색한 부분
[‘0’, ‘0’, ‘0’, ‘0’]인 경우 join한 결과값이 ‘0000’이다.
하지만 이 경우 '0000'이 아닌 '0'으로 return 되어야 한다.
따라서 int로 변환 후 다시 str으로 변환해서 return 한다.

def solution(numbers):
    answer = ""
    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x:x*3,reverse=True)
    answer = str(int("".join(numbers)))
    return answer

다른 사람의 풀이

import functools

def comparator(a,b):
    t1 = a+b
    t2 = b+a
    return (int(t1) > int(t2)) - (int(t1) < int(t2)) #  t1이 크다면 1  // t2가 크다면 -1  //  같으면 0

def solution(numbers):
    n = [str(x) for x in numbers]
    n = sorted(n, key=functools.cmp_to_key(comparator),reverse=True)
    answer = str(int(''.join(n)))
    return answer

정리

iterable.sort(key = )
sorted(iterable, key = )

key값을 기준으로 정렬하게 된다.

ex)
key = iterable.lower
key = lambda iterable: iterable[0]

"".join(list) : list 원소 합치기
'구분자'.join(리스트) : list 원소 사이에 구분자 넣어서 합치기

profile
👩🏻‍💻

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN