https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3 

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr


내 풀이

def solution(numbers):
    answer = ""
    
    numbers.sort(key = lambda x : str(x) * 3, reverse = True)
    return str(int("".join((map(str, numbers)))))

 

우선 내 최초의 접근방법은 이랬다.

 

 

가장 큰 수를 만드려면 자리수와 상관없이 앞 자리수가 커야한다.

앞 자리수가 같다면 두번째 자리수를 비교한다.

두번 째 자리수도 같다면 세번째 자리수를 비교한다.

여기서 관건은 자리수가 다른애들의 비교였다.

 

두번 째 예시의 정답이

9534330 인데 앞자리가 다른 9 5 는 제외하고

34 30 3 을 어떻게 비교해야 최대 수가 나오는지를 생각해보면

4 0 ? 을 비교해야하는데 어떻게 비교할것인가 였다.

이에대해 34 3 30 순으로 정렬된것을 보고 아, 일의자리수를 비교하되 자리수가 맞지않으면 늘려주면 되겠구나 하고 생각했다.최초에는 필요한 자리수만큼 곱해줬는데 그럴 필요없이 그냥 3자리수를 만드는게 더 낫다 라는 생각이 들었다.


num_list = [-1, 0, 1, 3, 4, 5, 9]

print(num_list)
# [-1, 0, 1, 3, 4, 5, 9]
print(" ".join(map(str, num_list)))
# -1 0 1 3 4 5 9

 

추가로 int형을 join하는 방법이다.


다른사람의 풀이

 

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))

이렇게까지 유사한 풀이는 잘 없었는데 신기하다.


개인적으로 풀이는 짧아도 얻어갈게 많은 문제라고 생각한다.

 

'취준 > 프로그래머스' 카테고리의 다른 글

조이스틱 - 파이썬  (0) 2022.07.03
소수 찾기 - 파이썬  (0) 2022.07.02
프린터 - 파이썬  (0) 2022.06.27
튜플 - 파이썬  (0) 2022.06.23
뉴스 클러스터링 - 파이썬  (0) 2022.06.15

+ Recent posts