[우아한테크코스] 7월 2일 TIL
[정렬] 가장 큰 수
def solution(numbers):
answer = ''
first_numbers = []
for i in numbers:
first_number = str(i)[0]
if first_number not in first_numbers:
first_numbers.append(first_number)
first_numbers.sort(reverse=True)
for i in first_numbers:
tmp = []
for j in numbers:
if str(j)[0] == i:
tmp.append(j)
tmp.sort(reverse=True) # 첫글자 같은거 모음
for k in tmp:
biggerThanTen = []
if k > 10:
if str(k)[1] > i:
biggerThanTen.append(k)
tmp.remove(k)
elif str(k)[1] == i:
if k > 100:
if str(k)[2] > i:
biggerThanTen.append(k)
tmp.remove(k)
elif str(k)[2] == i:
if k > 1000:
if str(k)[3] >= i:
biggerThanTen.append(k)
tmp.remove(k)
else:
biggerThanTen.append(k)
tmp.remove(k)
else:
continue
else:
continue
else:
continue
for n in biggerThanTen:
answer += str(n)
for m in tmp:
if str(m) == str(i):
answer += str(m)
tmp.remove(m)
for n in tmp:
answer += str(n)
return answer
내 구현은 너무너무너무너무 주먹구구 구현이다.
풀 때 더 나은 방법은 없을지 고민하고 풀자.
포인트
- 문제는 1000 이하의 원소로 한자리수가 *3 되면 문자열을 비교할 수 있다. 한자리수를 비교하는 건 당연따리 의미가 없으므로 세자리수로 만들어서 문자열 비교하는 것이 좋다.
- 문자열은 길이에 상관없이 앞자리수가 큰게 큰 수이다. 이렇게 큰거를 더하면 된다.
- 하지만 0000은 0이 되어야 한다. 문자열을 더한 값을 비교하는 것이므로 값을 문자열로 바꿔야 한다.
def solution(numbers): answer = '' if len(numbers) == numbers.count(0): return "0" sorted_numbers = list(map(str, numbers)) sorted_numbers.sort(key=lambda x: x*3, reverse=True) for n in sorted_numbers: answer += n return answer
[DB] clob
- CLOB: 문자 대형 객체 (Character). Oracle Server는 CLOB과 VARCHAR2 사이에 암시적 변환을 수행한다.