[우아한테크코스] 7월 2일 TIL

1 minute read

[정렬] 가장 큰 수

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

내 구현은 너무너무너무너무 주먹구구 구현이다.

풀 때 더 나은 방법은 없을지 고민하고 풀자.

포인트

  1. 문제는 1000 이하의 원소로 한자리수가 *3 되면 문자열을 비교할 수 있다. 한자리수를 비교하는 건 당연따리 의미가 없으므로 세자리수로 만들어서 문자열 비교하는 것이 좋다.
  2. 문자열은 길이에 상관없이 앞자리수가 큰게 큰 수이다. 이렇게 큰거를 더하면 된다.
  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 사이에 암시적 변환을 수행한다.