• 문제 설명
    • 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
    • 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
    • 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
  • 제한 사항
    • numbers의 길이는 1 이상 100,000 이하입니다.
    • numbers의 원소는 0 이상 1,000 이하입니다.
    • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

  • 실패 문제 풀이
    • 접근을 기존에 100자리 10자리 1자리 다 구하는 식으로 했으나 그렇게 하면 비효율 적이라 그럼 전부 100자리로 만들고 그 걸 기준으로 정렬하기로 결정
    • 그러나 이렇게 했을때 시간에 걸리게 되었다.
def solution(numbers):
    answer = ''
    N = len(numbers)
    temp_dict = {}
    check_dict = {}
    for x,word in enumerate(numbers):
        add_num = str(word)
        if word < 10:
            add_num = str(word * 111)
        elif word > 9 and word < 100:
            add_num = str((word * 10) + (word % 10))
        
        temp_dict[str(word)] = add_num
        if str(word) in check_dict:
            check_dict[str(word)] += 1
        else:
            check_dict[str(word)] = 1
            
    for key, value in sorted(temp_dict.items(), key=lambda x: -int(x[1])):
        for _ in range(check_dict[key]):
            answer += key
    
    return answer if int(answer) > 0 else '0'

 

 

 

  • 해당 문제를 풀면서 느낀점
    • 결국 해당 문제를 위해 검색등을 활용하여 다른 사람들이 풀었던 부분으로 확인 해보니 기본적으로 문제 풀이 아이디어는 비슷 했던거 같았다.
    • 시간 복잡도 없이 했다고 하면 양쪽 비교하여 큰 수가 나오는 식으로 만드는데 시간 복잡도를 생각하면 자체 내장 함수들로 이용하여 푸는 식었다.
    • 그중 위의 아이디어와 유사한 부분이 있어서 그부분을 적용 한 코드를 작성하니 간단히 풀리게 되었다.
    • 해당 코드는 간단하게 숫자를 문자로 변경한 걸 배열로 저장 이후 내장된 정렬 함수를 통해 정렬하는데 이때 정렬 기준을 3번 곱했을 때 나온 수로 비교하여 큰수를 앞에 정렬하게 하였다.
    • 여기서 중요한건 제한 조건이 1,000 보다는 작다라는 조건이 들어가기에 숫자들의 자릿수는 3자리이다
    • 그래서 * 3을 하여 자릿수를 3자리로 만들었고 그것을 가지고 정렬을 진행 하면 간단히 끝나게 되는 문제였다
더보기
def solution(numbers):
    answer = ''
    str_numbers = [str(number) for number in numbers]
               
    for value in sorted(str_numbers, key=lambda x: x*3, reverse=True):
            answer += value
    
    return answer if int(answer) > 0 else '0'

'Python > Python 문제' 카테고리의 다른 글

백준) 색종이  (0) 2024.07.18
피보나치 수 - 재귀함수 사용하여 풀기  (0) 2024.07.17
SWEA) 5215 .햄버거 다이어트(복습 필요)  (0) 2024.07.15
가장 큰 수 1일 차  (0) 2024.07.12
가장 많이 받은 선물  (0) 2024.07.12

+ Recent posts