스터디/알고리즘

가장 큰 수

세졍 2024. 1. 19. 21:36

 

문자열정렬

알고있어야 할것

ex )

numbers = [6,10,2,38]
numbers = list(map(str,numbers))  # 각 배열을 문자열로 바꾸는것

# 문자열 배열도 숫자가 아니지만 정렬이됨 sort()가능 
# '5' ,'10' 를 오름차순 정렬하면 각 첫자리숫자로 비교하므로 '10' '5' 순으로 정렬


numbers.sort(key=lambda x : x*4 ,reverse=True) # 각문자열을 반복하는 문자열을 만들고 문자열 내림차순하기
print(numbers)   #['6', '38', '2', '10'] 문자열 *4 한값이아니라 그냥 원본 배열에서 정렬된 상태로 출력

 

def solution(numbers):
    answer = ''
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x *3 , reverse=True)
    for i in numbers:
        answer += i
    return answer



numbers = [6,10,2]
print(solution(numbers))


# 이렇게 하니 테스트케이스 11번빼고 통과..
# return str(int(answer))

 

반례생각하기 numbers = [0,0,0] 이면 000 으로 출력함 ->  문자열 0으로만 출력되야함

 

def solution(numbers):
    lst = list(map(str,numbers))
    lst = sorted(lst,key=lambda x:x*3,reverse=True)
    if lst[0] == '0':
        return '0'

    return ''.join(lst)

numbers = [0,0,0]
print(solution(numbers))
# 정수를 이어붙여 만들수있는 가장 큰수를 출력 (문자열로바꿔서)

모든테스트 케이스 통과 코드..