[프로그래머스] LV2. 가장 큰 수 - 파이썬

곌로그·2023년 4월 29일
0

[python]코딩테스트

목록 보기
9/34
post-thumbnail

문제 링크


문제 요약

정렬문제 에 해당한다.

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 찾는 문제이다. 입력으로 들어오는 숫자들은 0 이상 1000이하이다.
예를 들어, [6, 10, 2]가 input으로 들어오면 정답은 "6210"으로 return 된다.


문제 풀이

def solution(numbers):
    
    strNum = [str(num) for num in numbers] #문자열로 치환
    
    strNum.sort(key=lambda num: num *3, reverse=True)
    
    answer=''
    answer= answer.join(strNum)
    
    if answer[0] == '0':
        answer = '0'

    return answer

📌 고려해야할 점

  • 우선 정수형으로 들어온 list를 str으로 치환한다.

  • 변환한 숫자들을 정렬 해야하는데 여기에서 주의해야할 점이 있다.
    예를들어, ['230', '2', '23'] 이라는 숫자 리스트가 들어왔다고 생각해보자. 이 숫자 리스트로 만들 수 있는 가장 큰 숫자는 '232302'이다. 따라서, 우리가 흔히 생각하는 정수형을 다루듯이 정렬하면 안된다.

    ['23', '230', '2'] 처럼 정렬이 되어야하고 '23'이 '230'보다 큰 숫자로 취급되어야 한다. 이를 구현하기 위해서 sort 함수에서 3을 곱하는 방식 으로 정렬해주자.
    3을 곱하게 되면,
    '23' 은 '232323', '230' 은 '230230203', '2'는 '222' 가 된다.

    이 방식을 통해 '23'과 '230'을 비교해보면, 세번째 자리 수에서 '23'이 더 크다는 것을 알 수 있다. 특히, 여기서 곱하기 3을 하는 이유는 들어오는 숫자가 최대 1000이기 때문이다.

  • 예외 케이스가 존재한다. 모든 숫자의 배열이 0으로 들어오면, 해당 코드는 '000'과 같은 결과가 나온다. 따라서, join의 결과의 가장 첫 번째 원소가 0이라는 것은 뒤의 모든 숫자들도 0이라는 것을 의미하므로 이때는 0을 return 해준다.

0개의 댓글