[level 2] 가장 큰 수 - 42746
성능 요약
메모리: 10.1 MB, 시간: 0.01 ms
구분
코딩테스트 연습 > 정렬
채점결과
정확성: 100.0
합계: 100.0 / 100.0
제출 일자
2023년 12월 6일 15:5:17
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers, return
[6, 10, 2], "6210"
[3, 30, 34, 5, 9], "9534330"
풀이
def solution(numbers):
answer = ''
temp = []
str_num = ''
for num in numbers:
str_num = str(num)*4
str_num = str_num[:4]
temp.append((str_num, num))
temp.sort(reverse=True)
if temp[0][1] == 0:
return '0'
else:
for s, i in temp:
answer += str(i)
return answer
느낀점
주어진 수는 1~1000의 범위를 가지는 정수이다. 어차피 앞 자리수부터 비교를 시작하더라도 주어지는 모든 수를 string으로 바꾼뒤에 4를 곱해서 비교해도 결과는 항상 같게 된다. ex) 232, 23, 24 -> 2322/32, 2323/, 2424 여기에서 가장 큰 수는 24, 23, 232 순이다.
따라서, 모두 4자리 수로 변환하고 임시 리스트에 원래 번호와 같이 append를 하고 다시 한번 for를 통해서 튜플에 저장된 번호 중, 원래 번호를 str으로 바꿔서 return하면 되는 문제이다.
정렬하는 방법을 찾는 것은 예전에 해봤지만, 막상 다시 해보려니 쉽지는 않았는데 점점 연습이 되어가는 느낌이 어느정도 생기는 것 같다.
'알고리즘' 카테고리의 다른 글
프로그래머스: 이상한 문자 만들기 (0) | 2023.12.16 |
---|---|
프로그래머스: 예산 (0) | 2023.12.16 |
프로그래머스: 약수의 개수와 덧셈 (0) | 2023.12.16 |
프로그래머스: H-index (1) | 2023.12.15 |
백준 1026번 (0) | 2023.12.14 |