728x90
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
문제해결과정
1. 이번문제는 정말 어려웠다. 몇번의 코드를 시도했는지 모른다. 처음에 시도했던 방법은 제시된 배열에 제시된 숫자들중 가장 큰 숫자의 길이에 맞춰 나머지 숫자들을 자리수에 맞춰서 붙여서 정렬을 할때는 잘됬지만 3, 30 이런경우에는 난감했다. 그래서 인덱스를 계산해서.. 어쩌고 저쩌고.. 다 의미없는 행동이였다.
2. 도저히 몰라서 풀이를 참고했을때도 처음부터 이해는 가지않았다. 자주 안쓰는 문법이다 보니 새로운것도 많았기에 학습하고 추후에 정리하기로 했다.
def solution(numbers):
# 처음시도 했던 코드,,
# answer = ''
# temp = []
# length = len(str(max(numbers)))
# gop = 0
# cnt = 0
# incnt = 0
# if length == 2:
# gop = 10
# elif length == 3:
# gop = 100
# elif length == 4:
# gop = 1000
# for i in range(len(numbers)):
# if length != len(str(numbers[i])):
# numbers[i] = numbers[i] * gop
# temp.append(numbers[i])
# cnt += 1
# #print(numbers)
# strA = sorted(numbers, reverse = True)
# #print(strA, temp)
# for i in range(len(strA)):
# if strA[i] in temp:
# if incnt != cnt:
# strA[i] = int(strA[i] / gop)
# answer += str(strA[i])
# incnt += 1
# else:
# answer += str(strA[i])
# else:
# answer += str(strA[i])
# return answer
answer =''
temp = []
for i in numbers:
temp.append(str(i))
answer = sorted(temp, key = lambda x : x * 3, reverse = True)
if answer[0] == '0':
return '0'
else:
return ''.join(answer)
728x90
'프로그래머스 > 코딩테스트 Lv. 2' 카테고리의 다른 글
소수 찾기 - Python (0) | 2023.10.30 |
---|---|
H-Index - Python (0) | 2023.10.28 |
더 맵게 - Python (0) | 2023.10.25 |
프로세스 - Python (0) | 2023.10.25 |
주식가격 - Python (1) | 2023.10.21 |