프로그래머스/코딩테스트 Lv. 2

가장 큰 수 - Python

아몬드바 2023. 10. 27. 23:55
728x90

문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.


입출력 예

문제해결과정

1. 이번문제는 정말 어려웠다. 몇번의 코드를 시도했는지 모른다. 처음에 시도했던 방법은 제시된 배열에 제시된 숫자들중 가장 큰 숫자의 길이에 맞춰 나머지 숫자들을 자리수에 맞춰서 붙여서 정렬을 할때는 잘됬지만 3, 30 이런경우에는 난감했다. 그래서 인덱스를 계산해서.. 어쩌고 저쩌고.. 다 의미없는 행동이였다.

2. 도저히 몰라서 풀이를 참고했을때도 처음부터 이해는 가지않았다. 자주 안쓰는 문법이다 보니 새로운것도 많았기에 학습하고 추후에 정리하기로 했다.


def solution(numbers):
# 처음시도 했던 코드,,
    # answer = ''
    # temp = []
    
    # length = len(str(max(numbers)))
    # gop = 0
    # cnt = 0
    # incnt = 0
    # if length == 2:
    #     gop = 10
    # elif length == 3:
    #     gop = 100
    # elif length == 4:
    #     gop = 1000

    # for i in range(len(numbers)):
    #     if length != len(str(numbers[i])):
    #         numbers[i] = numbers[i] * gop
    #         temp.append(numbers[i])
    #         cnt += 1
    
    # #print(numbers)
    # strA = sorted(numbers, reverse = True)
    # #print(strA, temp)
    
    # for i in range(len(strA)):
    #     if strA[i] in temp:
    #         if incnt != cnt:
    #             strA[i] = int(strA[i] / gop)
    #             answer += str(strA[i])
    #             incnt += 1
    #         else:
    #             answer += str(strA[i])
    #     else:
    #         answer += str(strA[i])

    # return answer
    
        answer =''

    temp = []
    for i in numbers:
        temp.append(str(i))

    answer = sorted(temp, key = lambda x : x * 3, reverse = True)

    if answer[0] == '0':
        return '0'
    else:
        return ''.join(answer)
728x90

'프로그래머스 > 코딩테스트 Lv. 2' 카테고리의 다른 글

소수 찾기 - Python  (0) 2023.10.30
H-Index - Python  (0) 2023.10.28
더 맵게 - Python  (0) 2023.10.25
프로세스 - Python  (0) 2023.10.25
주식가격 - Python  (1) 2023.10.21