def solution(numbers):
answer = ''; num = [];
"""
ⓐ
for i in numbers:
if i < 10:
num.append(i)
else:
while i >= 10: #10보다 큰 경우 앞자리 수만 봐야함.
num.append(i % 10)
i /= 10
num.append(int(i))
num.sort(reverse=True)
num = "".join(str(i) for i in num) #"".join은 리스트를 문자열로 변환.
"""
ⓑ
#다르게 생각하자 문자열로 변환하고 첫번째 인덱스로 비교해보자.
for i in numbers:
num.append(str(i))
#num = sorted(num,reverse=True)
num.sort(key=lambda x: x*3, reverse=True)
num = str(int("".join(i for i in num)))
return num;
ⓐ의 코드는 혼자 짠 코드인데 좀 망한 코드
10보다 크면 3.4이런 식으로 정수가 아닌 유리수로 만든 다음에
int 상태로 sort해주면
1, 10, 20, 34, 3이
3.4, 3, 2.0, 1.0, 1이런 식으로 변한다.
여기서 발생하는 필연적인 문제는 1.0과 1의 문제임 ㅠㅠ
그래서 아래 코드로 넘어감!
그래서 만든 코드 ⓑ
내 힘으로만 풀진 않고 풀이를 좀 봤다..
일단 좀 간단해졌다.
문자열로 바꾸고 추가했다.
문법 설명 먼저 하자면 lambda는 1회용 변수로 x는 해당 줄 이외에서는 사용 불가.
메모리를 크게 잡아먹지 않는 좋은 변수다.
문자열에 곱하기를 하면 해당 문자열이 더 생기는데 여기서 3을 곱하면 2가 222가 된다.
근데 문제상 다섯자리까지 나타나지므로 221에 3을 곱하면 22122에서 멈춘다.
이러면 자리수가 맞춰져서 대소비교가 쉬워진다.
10이랑 1도
111이랑 10101이므로 세번째 자리까지 비교할때 101이 111보다 작아서 1이 앞으로 가게끔 정렬된다!
추후에 자세히 설명하겠음 ㅠㅜ