[pro] 가장 큰 수
문제링크
https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3#
풀이과정
이 문제에서 핵심은 바로 앞 자리 수가 같은 문자열(수)들을 어떻게 배열하는가이다.
예를 들어
'6', '64', '600', '60'
이 있을 경우,
sorted()
함수에 넣고 오름차순 정렬해주면 ['6', '60', '600', '64']
가 된다.
그러나 가장 큰 수를 만들어 주려면 정렬이 ['6', '64', '60', '600']
이렇게 되어야 한다. 계속 앞자리 수부터 하나씩 뒤로 가면서 숫자가 큰 것이 앞에 와야 하는 것이다.
그렇게 하기 위해
'6' * 3 = '666'
'64' * 3 = '646464'
'60' * 3 = '606060'
'600' * 3 = '600600600'
이렇게 최소 자리 숫자가 한 자리, 최대 자리 숫자가 세 자리 이므로 문자열을 3번 곱해서 그걸 key 값으로 가지고 대소비교를 해주면
sorted(a, key = lambda x:x*3, reverse = True)
['6', '64', '60', '600']
이런 식으로 의도한대로 결과가 도출될 수 있다!!
이걸 염두해두고 풀면 풀린다!
단, [0, 0, 0, 0] 을 입력했을 경우, 정수를 이어 붙여 만들 수 있는 가장 큰 수가 0 인데, 문자열을 단순히 join으로 붙여줬을 경우, '0000'이 출력되어 다시 int()
로 한 번 형변환을 해주고 str()
로 형변환을 해줘서 리턴해줘야 한다!
cf.
문자열을 곱해주면 문자열이 반복되어 나타남!
a = ['6','64','600', '60']
print(a[1]*3) # '666'
풀이
def solution(numbers):
for i in range(len(numbers)):
numbers[i] = str(numbers[i])
numbers = sorted(numbers, key = lambda x: x*3, reverse = True)
answer = ''
for i in numbers:
answer += i
return str(int(answer))
"".join(리스트) : 리스트의 문자열을 합쳐주는 역할 함수
def solution(numbers):
for i in range(len(numbers)):
numbers[i] = str(numbers[i])
numbers = sorted(numbers, key = lambda x: x*3, reverse = True)
answer = "".join(numbers) # 리스트의 문자열들을 합치는 역할
return str(int(answer))
"(구분자)".join(리스트)
를 주면 구분자를 두고 리스트의 문자열을 합칠 수 있음!
Author And Source
이 문제에 관하여([pro] 가장 큰 수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@letsbebrave/pro-가장-큰-수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)