[알고리즘] 가장 큰 수

sith-call.dev·2023년 6월 23일
0

알고리즘

목록 보기
22/47

문제

가장 큰 수

코드

from itertools import permutations

def solution1(numbers):
    cases = list(permutations(numbers, len(numbers)))
    nums = []
    for case in cases:
        value = "".join(list(map(str, case)))
        nums.append(value)
    return max(nums)
          
def solution(numbers):
    nums = list(map(str, numbers))
    nums.sort(key = lambda x : x * 3, reverse=True)
    for num in nums:
        print(ord(num))
    print(nums)
    return ''.join(nums)

깨달은 점

정렬 기준으로는 아스키 코드 기준도 있다.아래의 참고문헌을 봐라.

lambda x : x * 3이 나온 이유

  1. x*3을 하게 되면 [3, 310, 30]이 [333, 310310310, 303030] 이렇게 된다. 자릿수를 맞춰 비교하기 위함이다. 그렇다면 자릿수는 왜 3개였을까?
  2. 문자열을 3번 쓰는 이유는 문제 조건에서 입력되는 숫자의 최대 크기가 1000미만이라 제시했기 때문이다.
    • 1000미만이기 때문에 999가 나와도 비교할 수 있어야 한다. 그러면 3과 999를 비교하기 위해선 적어도 3번 곱해야 한다. (문자열의 진한 색 부분끼리만 비교한다, "333" , "999999999")
    • 그러면 위의 예시처럼 세 자릿수 미만이라면 모두 세 자릿수로 통일된 채로 그것의 문자열들이 사전식으로 정렬된다. 이 정렬이 우리가 원했던 정렬이다.

참고 문헌

https://yuna0125.tistory.com/145

profile
lim (time → ∞) Life(time) = LOVE

0개의 댓글

관련 채용 정보