728x90
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3
-문제-
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbersreturn
[6, 10, 2] | 6210 |
[3, 30, 34, 5, 9] | 9534330 |
-설명-
1. 예를들어 12, 121 이면, 12가 앞에 121이 뒤인 12121가 12112보다 크다.
예를들어 40, 404 이면, 404가 앞에 40이 뒤인 40440가 40404보다 크다.
이처럼 앞자리도 중요하지만 끝자리가 어떤 값인지에 따라 큰 값이 달라진다.
2. 따라서 해당 수를 반복시켜 자릿수를 맞춰주도록 하겠다. 최대 3자리 이므로 숫자를 문자로 바꾸고 *3을 해준다.
ex) 6-> "666", 10-> "101010"
3. 정렬한 뒤에 모두가 "0000"이런 경우에 대비해 예외상황을 준다.
-테스트 케이스 제공-
-코드-
def solution(numbers):
answer=""
numberStr=[]
for i,value in enumerate(numbers):
st = str(value)
stri = st*3
numberStr.append([stri,i])
numberStr.sort(reverse=True)
for i,value in enumerate(numberStr):
index = value[1]
answer += str(numbers[index])
for value in answer:
if value!='0':
return answer
return "0"
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 다음 큰 숫자(Level 2)/Wanna Be 컴잘알 (0) | 2020.04.17 |
---|---|
프로그래머스 - 튜플(Level 2)/Wanna Be 컴잘알 (0) | 2020.04.17 |
프로그래머스-다리를 지나는 트럭(Level 2)/Wanna Be 컴잘알 (0) | 2020.04.15 |
프로그래머스-프린터(Level 2)/Wanna Be 컴잘알 (0) | 2020.04.14 |
프로그래머스-기능개발(Level 2)/Wanna Be 컴잘알 (0) | 2020.04.14 |